#include
#include
using namespace std;
void bfs();
int x1,y1,x2,y2;
int used[50][50]={0} ;
int s[20][20]={0};
char route[20][20]={0};
queue x;
queue y;//在这里需要考虑一个二维的情况,故需要给x,y各一个队列
int main()
{
int i,j;
cin>>x1>>y1>>x2>>y2;
x.push(x1);
y.push(y1);//相当于识别起始位置
for(i=1;i<=12 ;i++)
{
for(j=1;j<=12;j++)
{
cin>>route[i][j];
}
}
bfs();
return 0;
}
void bfs()
{
int i,j,flag=1;
while(flag == 1)
{
if(s[x2][y2] != 0) //在没走到终点之前,终点位置的数值始终为0
//一旦发现不是0了,说明计数已经“计到了”这个位置。当前数值也就代表了步数
//因为采取了广搜,所以不必担心,首先到达终点的情况肯定是“最小步数”的情况
{
cout<
break;
}
x1=x.front();
y1=y.front();//(x1,y1)始终为当前所在的位置
x.pop();
y.pop();
used[x1][y1]=1;//走过的不能重复走了!!!!! 之前忘了这个,结果走了很多重复的路!!!!!!!!!!!
if(route[x1-1][y1] == '.'&&used[x1-1][y1]==0)//向上走得通
{
x.push(x1-1);
y.push(y1);
s[x1-1][y1]=s[x1][y1]+1;
}
if(route[x1+1][y1] == '.'&&used[x1+1][y1]==0)//向下走得通
{
x.push(x1+1);
y.push(y1);
s[x1+1][y1]=s[x1][y1]+1;
}
if(route[x1][y1-1] == '.'&&used[x1][y1-1]==0)//向左走得通
{
x.push(x1);
y.push(y1-1);
s[x1][y1-1]=s[x1][y1]+1;
}
if(route[x1][y1+1] == '.'&&used[x1][y1+1]==0)//向右走得通
{
x.push(x1);
y.push(y1+1);
s[x1][y1+1]=s[x1][y1]+1;
}
}
}
千里之行,始于足下。
如果觉得《老鼠走迷宫C语言程序 电子老鼠走迷宫(广搜)WA》对你有帮助,请点赞、收藏,并留下你的观点哦!