poj1573

题意:给出一个矩形,N,E,S,W分别代表进行移动的方向,如果走出矩形网格则输出经过的网格数,如果在矩形网格内循环,则输出没进入循环之前所走过的网格数和循环所经过的网格数;

思路:创建两个数组,一个字符数组存每个网格中所要进行的操作,另一个整型数组代表状态,0代表没走过,1代表走过了,然后模拟;

   再提醒一点,建立的字符和整型数组要和题目中建里的一模一样,因为这个我又WA了一发、

   

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include<iostream>
#include<cstring>
using namespace std;
const int qq=15;
int gid[qq][qq];char s[qq][qq];
int main()
{
    int n,m,k;
    while(cin >> n >> m >> k)
    {  
        cin.get();
        if(n==0&&m==0&&k==0)    break;
    memset(gid,0,sizeof(gid));
    for(int i=0;i<=m+1;++i){
        gid[0][i]=1;gid[n+1][i]=1;  //外围标记
    }
    for(int i=0;i<=n+1;++i){         //外围标记
        gid[i][0]=1;gid[i][m+1]=1;
    }
    for(int j,i=1;i<=n;++i){
        for(j=1;j<=m;++j)
            s[i][j]=cin.get();
        cin.get();
    }
    int x,y;x=k;y=1;int tot=0;
    while(!gid[y][x]){              
        while(!gid[y][x]&&s[y][x]=='N'){
            gid[y][x]=1;y-=1;++tot;
        }
        while(!gid[y][x]&&s[y][x]=='E'){
            gid[y][x]=1;x+=1;++tot;
        }
        while(!gid[y][x]&&s[y][x]=='S'){
            gid[y][x]=1;y+=1;++tot;
        }
        while(!gid[y][x]&&s[y][x]=='W'){
            gid[y][x]=1;x-=1;++tot;
        }
    }
    if(x<1||y<1||x>m||y>n)  cout << tot << " step(s) to exit\n";  
    else{
        int count=0;
        while(gid[y][x]){                //计算循环所经过的网格数  此时1,0的意义互换
            while(gid[y][x]&&s[y][x]=='N'){
                gid[y][x]=0;y-=1;++count;
            }
            while(gid[y][x]&&s[y][x]=='E'){
                gid[y][x]=0;x+=1;++count;
            }
            while(gid[y][x]&&s[y][x]=='S'){
                gid[y][x]=0;y+=1;++count;
            }
            while(gid[y][x]&&s[y][x]=='W'){
                gid[y][x]=0;x-=1;++count;
            }
        }
        cout << tot-count << " step(s) before a loop of " << count << " step(s)\n";
    }
    }
}

  

 

posted @   我不萌、我要高冷  阅读(784)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示