啊哈算法—解救小哈深度优先搜索
解救小哈
小哈在一个(m * n)大小的迷宫(0 ⇐ m, n ⇐ 50)里迷路了。在迷宫中,每个单元格要么是空地,要么是障碍物。现在要找到从起点到小哈位置的最短步数。
思路:
使用递归一步一步向前试探,试探成功则步数加一,返回后向另一个方向试探,到达终点后比较最小步数。
源码:
-
-
-
int n, m, p, q, min = _CRT_INT_MAX;
-
int a[51][51], book[51][51];
-
-
void dfs(x, y, step);
-
-
void dfs(x, y, step) {
-
int next[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} }; //控制下一步走的方向
-
int tx, ty; //下一步坐标
-
int k;
-
-
if (x == p && y == q) { //到达终点
-
if (step < min) {
-
min = step; //更新最小值
-
}
-
return;
-
}
-
-
for (k = 0; k < 3; k ) { //循环尝试下一步
-
tx = x next[k][0];
-
ty = y next[k][1];
-
if (tx < 1 || tx > n || ty < 1 || ty > m) { //判断是否出界
-
continue;
-
}
-
if (a[tx][ty] == 0 && book[tx][ty] == 0) { //判断是否为障碍物或已走过
-
book[tx][ty] = 1; //标记此格已走过
-
dfs(tx, ty, step 1);
-
book[tx][ty] = 0; //取消尝试
-
}
-
}
-
return;
-
}
-
-
int main() {
-
int i, j;
-
int startx, starty;
-
-
printf("请输入迷宫大小\n");
-
scanf("%d %d", &n, &m); //输入迷宫大小
-
-
printf("请输入迷宫\n");
-
for (i = 1; i <= n; i ) { //输入迷宫
-
for (j = 1; j <= m; j ) {
-
scanf("%d", &a[i][j]);
-
}
-
}
-
-
printf("请输入终点:");
-
scanf("%d %d", &p, &q); //输入终点;
-
-
printf("请输入起点:");
-
scanf("%d %d", &startx, &starty);
-
-
dfs(startx, starty, 0);
-
-
printf("最小路径:%d", min);
-
-
return 0;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfcjij
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01