定义一个二维数组:
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)
#include<iostream> using namespace std; #include<queue> int dir[4][2]={0,1,1,0,0,-1,-1,0}; const int N=7; char data[N][N]; struct bu{ int hang,lie,num; bu(int hang,int lie,int num){ this->hang=hang; this->lie=lie; this->num=num; } bu(){ } }; struct bu res[N*N]; int temp=0,last; void bfs(){ queue<bu>value; value.push(bu(1,1,0)); data[1][1]=’1′; while(!value.empty()){ bu v=value.front(); res[temp++]=v; value.pop(); for(int i=0;i<4;++i){ int tx=v.hang+dir[i][0]; int ty=v.lie+dir[i][1]; if(data[tx][ty]==’0′) { data[tx][ty]=’1′; value.push(bu(tx,ty,v.num+1)); } if(tx==5&&ty==5){ last=v.num+1; break; } } } } int main(){ for(int i=0;i<N;++i) for(int j=0;j<N;++j) data[i][j]=’1′; for(int i=1;i<=5;++i) for(int j=1;j<=5;++j) cin>>data[i][j]; bfs(); cout<<“(0, 0)”<<endl; int fir=res[0].num; for(int i=1;i<N*N-1;++i){ if(res[i].num!=fir){ cout<<“(“<<res[i].hang-1<<“, “<<res[i].lie-1<<“)”<<endl; fir=res[i].num; } if(res[i].num==last) break; } }