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; }
相关文章推荐
- HDOJ 1013 Digital Roots(算是大数水题)
- hdoj--5611--Baby Ming and phone number(模拟水题)
- hdoj--1872--稳定排序(水题)
- HDOJ1412 排序水题
- HDOJ1208 记忆化搜索水题
- HDOJ 5536 Chip Factory (qwb铜牌水题 暴力+运气)
- hdoj--2803--The MAX(水题)
- hdoj 2803 The MAX 【水题】
- HDOJ2008 ( 数值统计 ) 【水题】
- HDOJ(HDU) 2090 算菜价(简单水题、)
- hdoj 1720 A+B Coming (超水题!!)
- HDOJ1035
- HDOJ 1017 (水题)
- HDOJ/HDU 2537 8球胜负(水题.简单的判断)
- [水题][hdoj_1096]A+B for Input-Output Practice (VIII)
- HDOJ 1039 字符串 水题
- HDOJ 1093 A+B for Input-Output Practice (V)(水题)
- HDOJ 5086 Revenge of Segment Tree 水题
- HDOJ的入门级水题
- HDOJ丶水题大放送