求人在迷宫中的路径
构造结构体作为数据类型,c表示指示方向,ind表示 走过次数,只有两种情况,出来和出不来。出来指ij超出边界,出不来就在里面循环,只要走过的次数达到2次就表示出不来了。设两个计数器,当走过次数为0时,计数器1++;次数为1时,计数器2++。输出问题也解决了。
上代码
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct Maze{ char c; int ind; }maze[100][100]; int main() { int k; int m,n; int step1,step2,flag; while(~scanf("%d%d",&m,&n),m,n){ scanf("%d",&k); getchar(); for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ scanf("%c",&maze[i][j].c); maze[i][j].ind=0; } getchar();//输入时有回车 } step1 = step2 = flag = 0; int i=1,j=k; while(1){ if(maze[i][j].ind == 1){ step2++; maze[i][j].ind++; } else if(maze[i][j].ind == 0){ step1++; maze[i][j].ind++; } else if(maze[i][j].ind == 2){ flag=0;break; } switch(maze[i][j].c){ case 'N':i-=1;break; case 'S':i+=1;break; case 'E':j+=1;break; case 'W':j-=1;break; } if(i<1||i>m||j<1||j>n){ flag=1;break; } } if(flag == 1){ printf("%d step(s) to exit ",step1); } else{ printf("%d step(s) before a loop of %d step(s) ",step1-step2,step2); } } return 0; }