HDU 1035 Robot Motion

 

求人在迷宫中的路径
构造结构体作为数据类型,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\n",step1);
        }
        else{
            printf("%d step(s) before a loop of %d step(s)\n",step1-step2,step2);
        }
    }
    return 0;
}

 

posted @ 2016-01-24 10:06  闪耀子  阅读(120)  评论(0编辑  收藏  举报