题意:
根据给出的矩阵中的NEWE判断走向,若能走出则输出
10 step(s) to exit
若不能走出则输出
3 step(s) before a loop of 8 step(s)
分析:
水题,但很像这几天做的dfs,只是形式==b.浪费了我好长时间调试,还写的特挫。
遇到的问题:
1. 初始化边界搞了一会儿,发现行列弄错了。。。囧//
2. 设置标记数组时,问题爆了很多,最后发现要避免path=2又被path=1覆盖为1.
哎,设了很多标记,可读性就变弱了。>,<….
#include <stdio.h>
#include <string.h>
int main()
{
int row,col,start;
int i,j,x,y,path[15][15],count,flag,ff,f1;
char a[15][15];
while(scanf("%d%d%d",&row,&col,&start)!=EOF)
{
count=0;
ff=0;
f1=0;
flag=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
path[i][j]=0;
if(row==0&&col==0&&start==0) break;
for(i=1;i<=row;i++)
{
scanf("%s",&a[i][1]);
}
for(i=0;i<row+2;i++)
{
a[i][0]='0';
a[i][col+1]='0';
}
//a[i][0]='\0';
for(i=0;i<col+2;i++)
{
a[0][i]='0';
a[row+1][i]='0';
}
//a[0][i]='\0';
x=1;
y=start;
while(1)
{
if(path[x][y]!=2)
path[x][y]=1;//怎样避免path=2又被覆盖为1。
if(a[x][y]=='0') break;
if(path[x][y]==2&&f1==1) break;
else if(path[x][y]==2) f1=1;
if(a[x][y]=='N')
{
x--;count++;
}
else if(a[x][y]=='S')
{
x++;count++;
}
else if(a[x][y]=='E')
{
y++;count++;
}
else if(a[x][y]=='W')
{
y--;count++;
}
if(path[x][y]==1)
{
flag++;
if(ff==0)
{
ff=1;
path[x][y]=2;
}
}
}
if(flag==0)
printf("%d step(s) to exit\n",count);
else
printf("%d step(s) before a loop of %d step(s)\n",count-2*flag,flag);
}
return 0;
}