poj3984 广度搜索BFS
迷宫问题
Description
定义一个二维数组:
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int map[5][5],len[30],front,sear,x,y,i,j; 5 struct que 6 { 7 int x,y; 8 int n; 9 10 }que[30]; 11 int xx[]={1,0,-1,0}; 12 int yy[]={0,1,0,-1}; 13 int bfs() 14 { 15 front=0;sear=0;len[0]=0;que[0].x=0;que[0].y=0;que[front].n=-1; 16 while(front<=sear) 17 { 18 for(i=0;i<4;i++) 19 { 20 x=que[front].x+xx[i]; 21 y=que[front].y+yy[i]; 22 if(x>=0&&y>=0&&x<5&&y<5&&map[x][y]==0) 23 { 24 map[x][y]=1; 25 que[++sear].x=x; 26 que[sear].y=y; 27 que[sear].n=front; 28 len[sear]=len[front]+1; 29 if(x==4&&y==4)return 1; 30 } 31 } 32 front++; 33 } 34 } 35 36 void myprintf(int x) 37 { 38 if(x==-1) 39 { 40 return; 41 } 42 myprintf(que[x].n); 43 printf("(%d, %d)\n",que[x].x,que[x].y); 44 } 45 46 int main() 47 { 48 49 for(i=0;i<5;i++) 50 { 51 for(j=0;j<5;j++) 52 scanf("%d",&map[i][j]); 53 getchar(); 54 } 55 bfs(); 56 myprintf(sear); 57 return 0; 58 }