【POJ】[1573]Robot Motion

文章字数:213

问题描述

Robot Motion

问题分析

直接按照题目要求进行操作就好
记录当前位置是第几步
如果当前位置已经有记录
说明已经被走过 也就是进入了循环
如果有越界说明已经走出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
char map[120][120];
int cnt[120][120];
int n,m,resx,resy;
bool win=false;
int move(int x,int y,int mcnt) {
//  printf("%d-%d-%c\n",x,y,map[x][y]);
    if(x<0||x==n||y<0||y==m) {
        win=true;
        return mcnt-1;
    }
    if(cnt[x][y]) {
        win=false;
        resx=x;
        resy=y;
        return mcnt-1;
    }
    cnt[x][y]=mcnt;
    if(map[x][y]=='N')
        return move(x-1,y,mcnt+1);
    else if(map[x][y]=='S')
        return move(x+1,y,mcnt+1);
    else if(map[x][y]=='W')
        return move(x,y-1,mcnt+1);
    else if(map[x][y]=='E')
        return move(x,y+1,mcnt+1);
}
int main() {
    int k;
    while(scanf("%d %d %d",&n,&m,&k),n||m||k) {
        getchar();
        for(int i=0; i<n; i++) {
            for(int j=0; j<m; j++) {
                cnt[i][j]=0;
                scanf("%c",&map[i][j]);
            }
            getchar();
        }
        int res=move(0,k-1,1);
        if(win)
            printf("%d step(s) to exit\n",res);
        else
            printf("%d step(s) before a loop of %d step(s)\n",cnt[resx][resy]-1,res-cnt[resx][resy]+1);
    }
    return 0;
}

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...