#include<cstdio> using namespace std; struct Node { int x;//当前结点的坐标 int y;//当前结点的坐标 int pre;//前驱 } q[200]; bool vis[10][10];//是否访问 int way[4][2]= {{0,-1},{0,1},{-1,0},{1,0}}; //上下左右四个方向 int maze[10][10];//定义迷宫 int l=0,r=1,x,y,nx,ny; void Print(Node path) { if(path.pre==-1) { printf("(%d, %d)\n",path.x-1,path.y-1); return; } else { Print(q[path.pre]); printf("(%d, %d)\n",path.x-1,path.y-1); } } void bfs() { while(l<r) { x = q[l].x; y = q[l].y; if(x==5&&y==5) { Print(q[l]); return; } for(int i = 0; i<4; ++i) { nx = x + way[i][0]; ny = y + way[i][1]; if(vis[nx][ny]==false&&maze[nx][ny]==0) { if(nx>=1&&nx<=5&&ny>=1&&ny<=5) { q[r].x = nx; q[r].y = ny; q[r].pre = l; vis[nx][ny] = true; r++; } } } l++; } return; } int main() { //freopen("in.txt","r",stdin); for(int i = 1; i<=5; ++i) for(int j = 1; j<=5; ++j) scanf("%d",&maze[i][j]); q[0].x = 1; q[0].y = 1; q[0].pre = -1; vis[1][1] = true; bfs(); return 0; }
利用数组模拟队列。并保存前驱