码迷,mamicode.com
首页 > 其他好文 > 详细

poj1573 Robot Motion

时间:2017-11-10 23:17:14      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:--   方向   main   指令   size   step   代码   ble   问题   

题目链接

http://poj.org/problem?id=1573

题意

一个机器人在给定的迷宫中行走,在迷宫中的特定位置只能按照特定的方向行走,有两种情况:①机器人按照方向序列走出迷宫,这时输出机器人走出迷宫的步数;②机器人在迷宫中陷入了循环,这种情况要输出机器人陷入循环前所走的步数以及循环的步数。

思路

走迷宫问题一般使用BFS或DFS求解,这里我使用DFS来求解。机器人能顺利走出迷宫的情况比较容易判断,主要是如何判断机器人陷入了循环以及陷入循环后的输出。我使用visit[r][c]来记录位置(r,c)是否被访问过,使用steps[r][c]记录机器人从起点到点(r,c)所经历的步数。假设(r,c)按照指令走了一步后的坐标为(nr,nc),若(nr,nc)已不在迷宫中,则输出结果;若(nr,nc)还在迷宫中,若该位置未被访问过,则按照指令走下一步,若(nr,nc)被访问过,则说明陷入了循环,位置(nr,nc)即是循环的起点,steps[nr][nc]-1即陷入循环前机器人所行走的步数,steps[r][c]-steps[nr][nc]+1即为循环的步数。

代码

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int N = 11;
 7 char ins[N][N];
 8 int visit[N][N];
 9 int steps[N][N];
10 int m, n, sc;
11 
12 void dfs(int r, int c, int stp)
13 {
14     int nr, nc;
15     switch(ins[r][c])
16     {
17     case N:
18         nr = r - 1;
19         nc = c;
20         break;
21     case E:
22         nr = r;
23         nc = c + 1;
24         break;
25     case S:
26         nr = r + 1;
27         nc = c;
28         break;
29     case W:
30         nr = r;
31         nc = c - 1;
32         break;
33     }
34 
35     if(nr>=0&&nr<m && nc>=0&&nc<n)  //还在迷宫中
36     {
37         if(!visit[nr][nc])  //(nr, nc)未被访问
38         {
39             steps[nr][nc] = stp + 1;
40             visit[nr][nc] = 1;
41             dfs(nr, nc, stp+1);
42         }
43         else    //出现循环
44         {
45             printf("%d step(s) before a loop of %d step(s)\n", steps[nr][nc]-1, stp-steps[nr][nc]+1);
46             return;
47         }
48     }
49     else    //走出迷宫
50     {
51         printf("%d step(s) to exit\n", stp);
52         return;
53     }
54 }
55 
56 int main()
57 {
58     //freopen("poj1573.txt", "r", stdin);
59     while(cin>>m>>n>>sc && m)
60     {
61         memset(visit, 0, sizeof(visit));
62         memset(steps, 0, sizeof(steps));
63 
64         for(int i=0; i<m; i++)
65             cin>>ins[i];
66 
67         sc--;
68         visit[0][sc] = 1;
69         steps[0][sc] = 1;
70         dfs(0, sc, 1);
71     }
72     return 0;
73 }

poj1573 Robot Motion

标签:--   方向   main   指令   size   step   代码   ble   问题   

原文地址:http://www.cnblogs.com/sench/p/7816528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!