标签:
1 #include<stdio.h> 2 #include<queue> 3 #include<string.h> 4 using namespace std; 5 int step,t; 6 int visit[25]; 7 int map[25]; 8 int pre[26]; 9 int disx[4]={0,1,0,-1}; 10 int disy[4]={1,0,-1,0}; 11 void initial(){ 12 memset(visit,0,sizeof(visit)); 13 for(int i=0;i<25;i++)pre[i]=-1; 14 } 15 void print(int num){ 16 if(num>0){ 17 int x=num/5,y=num%5; 18 print(pre[num]); //递归;让从第一个点开始 19 printf("(%d, %d)\n",x,y); 20 } 21 } 22 void bfs(){int nx,ny,a,b; 23 queue<int>dl; 24 a=0; 25 dl.push(a); 26 visit[0]=1;memset(pre,-1,sizeof(pre)); 27 pre[0]=-1; 28 while(!dl.empty()){ 29 a=dl.front(); 30 dl.pop(); 31 for(int i=0;i<4;i++){nx=a/5;ny=a%5; 32 nx=nx+disx[i];ny=ny+disy[i]; 33 b=nx*5+ny; 34 if(nx>=0&&ny>=0&&nx<5&&ny<5&&!visit[b]&&!map[b]){ 35 visit[b]=1; 36 dl.push(b); 37 pre[b]=a; 38 } 39 } 40 } 41 print(24);//因为只有一个解,所以到最后就行了,如果存在多组解,这种方法就不行了; 42 } 43 int main(){ 44 int x,y; 45 for(int i=0;i<25;i++)scanf("%d",&map[i]); 46 initial(); 47 puts("(0, 0)"); 48 bfs(); 49 return 0; 50 }
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,
};
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4707541.html