给定起点终点的寻找最短路径并打印。这是我自己写的模板。有意自取。
bfs每扩充一层,就把上层位置记录在node的pre中,最后递归打印。
用队列实现。
注意递归的调用顺序,到出口(最简计算)再返回。
代码:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int map[10][10];
int dir[4][2]= {1,0,-1,0,0,1,0,-1};
struct node
{
int x,y,pre;//记录上层
} q[105];
bool judge(int x,int y)
{
if(x>=0&&x<=4&&!map[x][y]&&y>=0&y<=4)return 1;
return 0;
}
void print(int x)
{
if(q[x].pre!=-1)
{
print(q[x].pre);//注意打印顺序
cout<<"("<<q[x].x<<", "<<q[x].y<<")"<<endl;
}
}
void bfs()
{
int front = 0,rear = 1;
q[front].x=0;
q[front].y=0;
q[front].pre=-1;
while(front<rear)
{
for(int i=0; i<4; i++)
{
int nx = q[front].x+dir[i][0];
int ny = q[front].y+dir[i][1];
if(judge(nx,ny))
{
map[nx][ny]=1;
q[rear].x=nx;
q[rear].y=ny;
q[rear++].pre=front;
}
if(nx==4&&ny==4)//找到最短回归
{
cout<<"(0, 0)"<<endl;
print(front);
cout<<"(4, 4)"<<endl;
return;
}
}
front++;
}
}
int main()
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
cin>>map[i][j];
bfs();
}