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

来源:互联网 发布:大地彩票v6 源码 编辑:程序博客网 时间:2024/05/18 21:47
#include<iostream>#include<stdio.h>#include<string>using namespace std;class Point{public:int x;int y;int step;};#define MAX 12int 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;}