#include
int x1, y1, x2, y2;//起点坐标终点坐标
int min = 999999; //步数
int dir[4][2] = { -1,0,1,0,0,-1,0,1 };
int image[5][5] = { 0,0,1,1,1,
0,0,1,1,1,
0,0,0,1,1,
1,0,1,1,1,
0,0,0,0,0};
void dfs(int x, int y, int t)
{
int i, xx, yy;
if (x == x2 && y == y2)//到达终点
{
if (t
{
min = t;//取最小值
}
return;
}
image[x][y] = 1;//将走过的路设1,以免下次又以为这是一条路,又走回来
for (i = 0; i
{
xx = x + dir[i][0];
yy = y + dir[i][1];//生成新的方向坐标
if (xx = 5 || yy < 0 || yy >= 5 || mg[xx][yy] == 1)//超出地图,或者为墙,则要重新换个方向走
continue;
dfs(xx, yy, t + 1);//步数+1,以xx,yy为新的坐标,来进行对下次的方向进行选择又生成新的xxyy
mg[xx][yy] = 0;//这一步是当走到终点了,或者是有一个xxyy坐标上下左右都不能走,则要将刚走过的路(之前设为墙了)恢复成路
}
}
int main()
{
printf("输入起点和终点坐标");
scanf_s("%d%d%d%d", &x1, &y1, &x2, &y2);
dfs(x1, y1, 0);
printf("%d", min);
return 0;
}
min =t ;这步后面的return;
我是这样理解的:假如第一次t=4,第二次有更短的路径t=3;理论上输出min=3。但是第一次t小于9999已经终止函数输出min=4。虽然这样肯定是错的理解,哪但个地方错了大