HDU 1035(走迷宫 模拟)

题意是给定初始位置在一个迷宫中按照要求前进,判断多少步能离开迷宫或者多少步会走入一个长达多少步的循环。

按要求模拟前进的位置,对每一步在 vis[ ] 数组中进行已走步数的记录,走出去或走到已走过的位置结束,计算出所要求的步数即可。

要注意的一点是记得 scanf 在 %c 的时候会读入空格和换行的,而 %s 读入的时候以空格和换行作为读入结束的标志。简单起见直接用 cin / cout 了......

代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int vis[100][100];
 4 char mp[100][100];
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     int n,m,x,y,cnt;
 9     while(cin >> n >> m)
10     {
11         if(!(n||m)) break;
12         memset(vis,0,sizeof(vis));
13         cin >> y;
14         for(int i = 1; i <= n; ++i)
15             for(int j = 1; j <= m; ++j)
16                 cin >> mp[i][j];
17         x = 1;
18         cnt = 1;
19         while(1)
20         {
21             if(x<1||x>n||y<1||y>m)
22             {
23                 cout << cnt-1 << " step(s) to exit\n";
24                 break;
25             }
26             if(vis[x][y])
27             {
28                 cout << vis[x][y]-1 << " step(s) before a loop of " << cnt-vis[x][y] << " step(s)\n";
29                 break;
30             }
31             vis[x][y] = cnt++;
32             if(mp[x][y] == 'N') --x;
33             else if(mp[x][y] == 'W') --y;
34             else if(mp[x][y] == 'E') ++y;
35             else if(mp[x][y] == 'S') ++x;
36         }
37     }
38     return 0;
39 }
View Code

 

转载于:https://www.cnblogs.com/Taskr212/p/9554111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值