OJ上显示50%错误,求解

hx073269最近玩起了机器人游戏,在这个机器人游戏中,他要控制一个机器人进行走动,但是这个机器人只有四个指令,分别为:
N(向上走一步)
S(向下走一步)
E(向右走一步)
W(向左走一步)

如图一所示,机器人从正上方走入方格矩阵,经过10步从最左边走出方格。
如图二所示,机器人从正上方走入方格矩阵,经过三步后,陷入了一个循环,循环的路径长度为8.
现在hx073269希望你写一个程序来判断机器人离开方格矩阵需要多长时间,或者说机器人是如何循环的。
输入
输入包含多组测试用例。
对于每个样例。
第一行包含三个数字 n,m,t,n代表矩阵的行数,m代表矩阵的列数,t代表机器人从正上方的第t列进入迷宫。(1<=n,m<=10, 1=<t<=m)
接下来输入一个n行m列的方格矩阵。
0 0 0 代表输入结束。
输出
对于输入的每个样例,都有一行输出。
要么机器人遵循一定数量的指令,从任意一边的网格中退出,要么机器人遵循一定数量位置上的指令一次,然后重复某些位置上的指令。
下面的示例输入对应于上面的两个网格,并说明了两种输出形式。
样例输入 Copy
3 6 5
NEESWE
W W WESS(中间没有空格)
SNW W W W(中间没有空格)
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0
样例输出 Copy
10 step(s) to exit
3 step(s) before a loop of 8 step(s)

_
我的代码_

#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,m,t,step=0,pace,j,i,flag,start;

while(1)
{
    scanf("%d%d%d",&n,&m,&t);
    int a[n+2][m+2]={0},b[n+2][m+2]={0},c[n+2][m+2]={0};
    if(n==0&&m==0&&t==0) exit(0);
    char ch,chn;
    
    for(i=1;i<n+1;i++)
    {
        for(j=1;j<m+1;j++)
        {
            if(j==1) chn=getchar();
            scanf("%c",&ch);
            switch(ch)
            {
                case 'N':
                a[i][j]=1;
                break;
                case 'S':
                a[i][j]=2;
                break;
                case 'E':
                a[i][j]=3;
                break;
                case 'W':
                a[i][j]=4;
                break;
            }
        }
    }
    
    
    int x=1,y=t,step=1;
         
        start=a[x][y];
        for(;;)
        {
            
            b[x][y]=1;
            switch(start)
            {
                case 1:
                x--;
                break;
                case 2:
                x++;
                break;
                case 3:
                y++;
                break;
                case 4:
                y--;
                break;
                default:
                break;    
            }
            start=a[x][y];
            if (start==0)
            {
                flag=1;
                break;
            }
            
            if(b[x][y]==1) 
            {
            flag=0;
            break;
            }
            
            
            step++;
            
        }
        if(flag==1)
        printf("%d step(s) to exit\n",step);
        if(flag==0)
        {
            pace=0;
            start=a[x][y];
            
            while(1)
            {
                start=a[x][y];
                c[x][y]=1;
                switch(start)
              {
                case 1:
                x--;
                break;
                case 2:
                x++;
                break;
                case 3:
                y++;
                break;
                case 4:
                y--;
                break;
              }
              pace++;
              if (c[x][y]==1) break;
            }
            printf("%d step(s) before a loop of %d step(s)\n",step-pace,pace);
        }
}
    

return 0;

}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。