poj3984(BFS)
跟前面的几乎是一样的,不过这道题需要记录下路径
输出的时候从后往前找,找到第一个时开始输出,所以要用到递归
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #define Max 0x7f7f7f7f 5 using namespace std; 6 7 8 int map[6][6]; 9 int visited[6][6]; 10 int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; 11 int ans[6][6]; 12 int pre[30]; 13 struct node 14 { 15 int x; 16 int y; 17 }; 18 node path[30]; 19 20 21 void output(int head) 22 { 23 int tmp=pre[head]; 24 if(tmp==0) 25 { 26 printf("(%d, %d)\n",path[tmp].x,path[tmp].y); 27 } 28 else 29 { 30 output(tmp); 31 } 32 printf("(%d, %d)\n",path[head].x,path[head].y); 33 } 34 35 void bfs() 36 { 37 memset(visited,0,sizeof(visited)); 38 memset(ans,Max,sizeof(ans)); 39 int head=0; 40 int tail=1; 41 pre[head]=-1; 42 path[head].x=0; 43 path[head].y=0; 44 visited[path[head].x][path[head].y]=1; 45 while(head<tail) 46 { 47 int x=path[head].x; 48 int y=path[head].y; 49 if(x==4 && y==4) 50 { 51 output(head); 52 return ; 53 } 54 for(int i=0;i<4;i++) 55 { 56 int xx=x+dir[i][0]; 57 int yy=y+dir[i][1]; 58 if(visited[xx][yy]==0 && xx>=0 && xx<5 && yy>=0 && yy<5 && map[xx][yy]!=1) 59 { 60 path[tail].x=xx; 61 path[tail].y=yy; 62 pre[tail]=head; 63 tail++; 64 visited[xx][yy]=1; 65 } 66 } 67 head++; 68 } 69 70 } 71 int main() 72 { 73 int i,j; 74 for(i=0;i<5;i++) 75 { 76 for(j=0;j<5;j++) 77 { 78 scanf("%d",&map[i][j]); 79 } 80 } 81 bfs(); 82 return 0; 83 }
嗯,递归还是不太会用啊