#include<stdio.h>
int main()
{
int m,n,x,i,j,count=0,is=0;
scanf("%d %d %d",&n,&m,&x);
getchar();
char a[n][m],b;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%c",&a[i][j]);
}
getchar();
}
int s[n][m];
i=0,j=x-1;
while(s[i][j]!=1&&i>=0&&j>=0)
{
switch (a[i][j])
{
case 'N' :i--;count++;break;
case 'S' :i++;count++;break;
case 'E' :j++;count++;break;
case 'W' :j--;count++;break;
}
}
if(s[i][j]==1) printf("loop %d",count);
else printf("out %d",count);
return 0;
}
int s[n][m]; 数组要把初始值都设置为0。如果不设置数组初始值可能是随机的
并且你每次循环都要把s[i][j]赋值为1,表示这个格子已经走过了
你题目的解答代码如下:
#include<stdio.h>
int main()
{
int m,n,x,i,j,count=0,is=0;
scanf("%d %d %d",&n,&m,&x);
getchar();
char a[n][m],b;
int s[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%c",&a[i][j]);
s[i][j] = 0;
}
getchar();
}
i=0,j=x-1;
while(s[i][j]!=1 && i>=0 && i<n && j>=0 && j<m)
{
s[i][j] = 1;
switch (a[i][j])
{
case 'N' :i--;count++;break;
case 'S' :i++;count++;break;
case 'E' :j++;count++;break;
case 'W' :j--;count++;break;
}
}
if(s[i][j]==1) printf("loop %d",count);
else printf("out %d",count);
return 0;
}
如有帮助,望采纳!谢谢!