您的位置:首页 > 运维架构

hdoj 1035(算是水题把)(屏蔽freopen)

2011-11-13 20:16 369 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: