http://acm.hdu.edu.cn/showproblem.php?pid=1035
搜搜搜
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std ; char map[11][11] ; int dp[11][11] ; int n,m ; int ans,loop ; int flag ; void dfs(int x,int y,int cnt) { if(x<0 || x>=n || y<0 || y>=m) { flag=0 ; ans=cnt ; return ; } if(dp[x][y]!=-1) { flag=1 ; ans=dp[x][y] ; loop=cnt-dp[x][y] ; return ; } dp[x][y]=cnt ; switch (map[x][y]) { case 'N': x-- ; break ; case 'S': x++ ; break ; case 'W': y-- ; break ; case 'E': y++ ; break ; } dfs(x,y,cnt+1) ; } int main() { while(scanf("%d%d",&n,&m),(n||m)) { int s ; scanf("%d",&s) ; memset(dp,-1,sizeof(dp)); for(int i=0;i<n;i++) scanf("%s",map[i]) ; dfs(0,s-1,0); if(flag) printf("%d step(s) before a loop of %d step(s)\n",ans,loop) ; else printf("%d step(s) to exit\n",ans); } return 0 ; }