标签:
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 11270 | Accepted: 5487 | 
Description

Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
没什么可说的,做不出来可以考虑退出ACM了
#include<stdio.h>
#include<string.h>
char map[100][100];
int vis[100][100];
int flag;
 int x,y,h;
void dfs(int tx,int ty){
   if(flag==1)
    return;
   if(map[tx][ty]==‘N‘)
    tx-=1;
    else if(map[tx][ty]==‘S‘)
        tx+=1;
    else  if(map[tx][ty]==‘W‘)
        ty-=1;
    else if(map[tx][ty]==‘E‘)
        ty+=1;
    if(tx<1||tx>x||ty<1||ty>y)
        return;
    if(vis[tx][ty]==0){
        vis[tx][ty]=1;
        dfs(tx,ty);
    }
    else if(vis[tx][ty]==1){
        vis[tx][ty]=2;
        dfs(tx,ty);
    }
    else {
        flag=1;
        return;
    }
}
int main(){
   while(scanf("%d%d%d",&x,&y,&h)!=EOF){
        if(x==0&&y==0&&h==0)
        break;
        memset(vis,0,sizeof(vis));
        memset(map,0,sizeof(map));
      getchar();
      for(int i=1;i<=x;i++)
        gets(map[i]+1);
        int tx=1,ty=h;
        flag=0;
        vis[tx][ty]=1;
        dfs(tx,ty);
        int sum1=0,sum2=0;
        for(int i=1;i<=x;i++){
            for(int j=1;j<=y;j++){
                if(vis[i][j]==1)
                    sum1++;
                else if(vis[i][j]==2)
                    sum2++;
            }
        }
        if(sum2==0)
            printf("%d step(s) to exit\n",sum1);
        else
            printf("%d step(s) before a loop of %d step(s)\n",sum1,sum2);
   }
   return 0;
}
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4628792.html