#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
class Point
{
public:
int x;
int y;
int step;
};
#define MAX 12
int r,c,start;
char map[MAX][MAX];int visited[MAX][MAX];
void init()
{
int i,j;
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
map[i][j]='0';
visited[i][j]=0;
}
}
}
void input()
{
int i,j;char temp[MAX];
for(i=0;i<r;i++)
{
gets(temp);
for(j=0;j<strlen(temp);j++)
{
map[j][i]=temp[j];
}
}
}
int over(Point p)
{
if(p.x<0||p.y<0) return 1;
if(p.x>=c||p.y>=r) return 1;
return 0;
}
void go(Point p)
{
Point cs;
//向上
if(map[p.x][p.y]=='N')
{
cs.x=p.x;cs.y=p.y-1;cs.step=p.step;
//如果出界
if(over(cs))
{
printf("%d step(s) to exit\n",cs.step);
return ;
}
if(visited[cs.x][cs.y]>0)
{
printf("%d step(s) before a loop of %d step(s)\n",visited[cs.x][cs.y]-1,visited[p.x][p.y]-visited[cs.x][cs.y]+1);
return;
}
cs.step++;visited[cs.x][cs.y]=cs.step;
go(cs);
}
//向下
if(map[p.x][p.y]=='S')
{
cs.x=p.x;cs.y=p.y+1;cs.step=p.step;
//如果出界
if(over(cs))
{
printf("%d step(s) to exit\n",cs.step);
return ;
}
if(visited[cs.x][cs.y]>0)
{
printf("%d step(s) before a loop of %d step(s)\n",visited[cs.x][cs.y]-1,visited[p.x][p.y]-visited[cs.x][cs.y]+1);
return;
}
cs.step++;visited[cs.x][cs.y]=cs.step;
go(cs);
}
//向右
if(map[p.x][p.y]=='E')
{
cs.x=p.x+1;cs.y=p.y;cs.step=p.step;
//如果出界
if(over(cs))
{
printf("%d step(s) to exit\n",cs.step);
return ;
}
if(visited[cs.x][cs.y]>0)
{
printf("%d step(s) before a loop of %d step(s)\n",visited[cs.x][cs.y]-1,visited[p.x][p.y]-visited[cs.x][cs.y]+1);
return;
}
cs.step++;visited[cs.x][cs.y]=cs.step;
go(cs);
}
//向左
if(map[p.x][p.y]=='W')
{
cs.x=p.x-1;cs.y=p.y;cs.step=p.step;
//如果出界
if(over(cs))
{
printf("%d step(s) to exit\n",cs.step);
return ;
}
if(visited[cs.x][cs.y]>0)
{
printf("%d step(s) before a loop of %d step(s)\n",visited[cs.x][cs.y]-1,visited[p.x][p.y]-visited[cs.x][cs.y]+1);
return;
}
cs.step++;visited[cs.x][cs.y]=cs.step;
go(cs);
}
}
int main()
{
//freopen("input.txt","r",stdin);
while(scanf("%d%d%d",&r,&c,&start))
{
if(r==0&&c==0&&start==0)
{
return 0;
}
getchar();
init();
input();
Point st;st.x=start-1;st.y=0;st.step=1;
visited[st.x][st.y]=1;
go(st);
}
return 0;
}
hdoj 1035(算是水题把)(屏蔽freopen)
最新推荐文章于 2017-10-10 21:29:45 发布