[恢]hdu 1035

2011-12-21 10:28:36

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1035

题意:从最上方的第pos列进入,按照迷宫指示走,N向上,D向下,W向左,E向右,输出最终的结果(走出迷宫or循环)。

代码:

# include <stdio.h>
# include <string.h>


char map[110][110] ;
int dp[110][110] ;
int n, m, loop ;


int gao(int x, int y, int step)
{
if (x < 0 || x >= n || y < 0 || y >= m)
return -(step-1) ;
if (dp[x][y] != 0)
{
loop = dp[x][y]-1 ;
return step - dp[x][y] ;
}
dp[x][y] = step ;

switch (map[x][y]){
case 'N': x-- ; break ;
case 'S': x++ ; break ;
case 'W': y-- ; break ;
case 'E': y++ ; break ;
}

return gao(x, y, step+1) ;
}


int main ()
{
int pos, ans, i ;
while (~scanf ("%d %d%*c", &n, &m) && (n||m))
{
scanf ("%d%*c", &pos) ;
for (i = 0 ;i < n ; i++)
scanf ("%s%*c", map[i]) ;
memset (dp, 0, sizeof(dp)) ;
ans = gao(0, pos-1, 1) ;
if (ans < 0) printf ("%d step(s) to exit\n", -ans) ;
else printf ("%d step(s) before a loop of %d step(s)\n", loop, ans) ;
}
return 0 ;
}



posted @ 2012-01-06 23:22  Seraph2012  阅读(148)  评论(0编辑  收藏  举报