关于深度优先搜索求迷宫最短路问题

qq_39353189 2017-12-24 04:20:15
https://paste.ubuntu.com/26243819/
以上是我的代码
问题是求1,1到4,3的最短路。地图如下
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
正确答案是7,我的答案是3,各位大佬呢能不能看看是哪错了?谢谢!
...全文
782 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
日光降临 2018-02-12
  • 打赏
  • 举报
回复
大概两处错误,具体看下面代码:

#include<stdio.h>
int next[4][2] = {{0, 1}, {1,0}, {0,-1}, {-1, 0}};//每次递归都要调用,放在外面.
int p, q, min = 99999;
int map[101][101], vis[101][101];
void dfs(int x, int y, int step)
{
	int tx, ty, k;
	
	if (x == p && y == q)
	{
		if (min > step)
			min = step;
		return;
	}
	for (k = 0; k < 4; k++)
	{
		tx = x + next[k][0];
		ty = y + next[k][1];//1.应该是ty=y+next
		if (tx<1 || ty<1 || tx>5 || ty>4)//2. 看你的代码应该是5行4列
			continue;
		if (map[tx][ty] == 0 && vis[tx][ty] == 0)
		{
			vis[tx][ty] = 1;
			dfs(tx, ty, step + 1);
			vis[tx][ty] = 0; 
		}
	}
	return;
}
int main()
{
	int sx, sy, i, j;
   freopen("test_in.txt","r",stdin);
	scanf_s("%d %d %d %d", &sx, &sy, &p, &q);
	for (i = 1; i <= 5;i++)
	for (j = 1; j <= 4; j++)
		scanf_s("%d", &map[i][j]);
	vis[sx][sy] = 1;
	dfs(sx, sy, 0);
	printf("%d", min);
	return 0;
}
/*
1 1 4 3
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
*/

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧