题目代号:POJ 1573
题目链接:http://poj.org/problem?id=1573
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 14195 | Accepted: 6827 |
Description

Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
Source
题目大意:WESN分别代表四个方向,第三个数据代表第一行的第几个位置开始,如果能走出去则输出走了几步,如果不能走出去进入了循环则输出第几步进入了循环,循环有几步。按题目标准格式输出。
解题思路:水题,作个标记代表第几步,如果下一步被标记过了则退出循环输出,如果走出去了也退出循环。
AC 代码:
# include <stdio.h> # include <string.h> # include <stdlib.h> # include <iostream> # include <fstream> # include <vector> # include <queue> # include <stack> # include <map> # include <math.h> # include <algorithm> using namespace std; # define pi acos(-1.0) # define mem(a,b) memset(a,b,sizeof(a)) # define FOR(i,a,n) for(int i=a; i<=n; ++i) # define For(i,n,a) for(int i=n; i>=a; --i) # define FO(i,a,n) for(int i=a; i<n; ++i) # define Fo(i,n,a) for(int i=n; i>a ;--i) typedef long long LL; typedef unsigned long long ULL; char a[15][15]; int b[15][15]; int main() { //freopen("in.txt", "r", stdin); int n,m,k; while(cin>>n>>m,n&&m) { cin>>k; mem(a,0); mem(b,0); for(int i=1;i<=n;i++) cin>>a[i]+1; int x=1,y=k; b[x][y]=1; int ans=1; int flag=0; while(1) { if(a[x][y]==‘W‘)y--; else if(a[x][y]==‘S‘)x++; else if(a[x][y]==‘E‘)y++; else if(a[x][y]==‘N‘)x--; if(x==0||x==n+1||y==0||y==m+1) { printf("%d step(s) to exit\n",ans); break; } else if(b[x][y]) { printf("%d step(s) before a loop of %d step(s)\n",b[x][y]-1,ans-b[x][y]+1); break; } else { b[x][y]=++ans; } } } return 0; }
原文:http://www.cnblogs.com/teble/p/7243614.html