题目链接:http://poj.org/problem?id=3984
宽度优先搜索最短路径的记录和打印问题
1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 7 bool maze[5][5]; 8 int go[4][2] = {0,1,0,-1,1,0,-1,0}; 9 struct node 10 { 11 int x,y; 12 int prex,prey; 13 }path[5][5],temp; 14 15 void bfs() 16 { 17 queue<node> Q; 18 node temp; 19 int nx,ny; 20 path[0][0].x=path[0][0].y=0; 21 Q.push(path[0][0]); 22 while(!Q.empty()) 23 { 24 temp = Q.front(); 25 Q.pop(); 26 if(temp.x==4&&temp.y==4) 27 return; 28 for(int i=0;i<4;i++) 29 { 30 nx = temp.x + go[i][0]; 31 ny = temp.y + go[i][1]; 32 if(nx>=0&&nx<5&&ny>=0&&ny<5&&!maze[nx][ny]) 33 { 34 path[nx][ny].x = nx; 35 path[nx][ny].y = ny; 36 path[nx][ny].prex = temp.x; 37 path[nx][ny].prey = temp.y; 38 maze[nx][ny] = 1; 39 Q.push(path[nx][ny]); 40 } 41 } 42 } 43 } 44 45 void print_path(int x,int y) 46 { 47 if(x==0&&y==0) 48 { 49 cout<<"("<<path[0][0].x<<", "<<path[0][0].y<<")"<<endl; 50 return ; 51 } 52 int px = path[x][y].prex; 53 int py = path[x][y].prey; 54 print_path(px,py); 55 cout<<"("<<path[x][y].x<<", "<<path[x][y].y<<")"<<endl; 56 } 57 int main() 58 { 59 for(int i=0;i<5;i++) 60 for(int j=0;j<5;j++) 61 scanf("%d",&maze[i][j]); 62 bfs(); 63 print_path(4,4); 64 return 0; 65 }