NOJ 1042 电子老鼠闯迷宫
来源:互联网 发布:淘宝身份认证失败 编辑:程序博客网 时间:2024/05/20 07:17
2016.11.3
【题目描述】
1042.电子老鼠闯迷宫
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
有一只电子老鼠被困在如下图所示的迷宫中。这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。现给定一个起点S和一个终点T,求出电子老鼠最少要几步从起点走到终点。
输入
本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标S(x.y)和终点的坐标T(x,y)。从第二行开始的12行中,每行有12个字符,描述迷宫的情况,其中’X’表示建筑物,’.’表示路.
输出
输出一个整数,即电子老鼠走出迷宫至少需要的步数。
输入样例
2 9 11 8
XXXXXXXXXXXX
X……X.XXX
X.X.XX…..X
X.X.XX.XXX.X
X.X…..X..X
X.XXXXXXXXXX
X…X.X….X
X.XXX…XXXX
X…..X….X
XXX.XXXX.X.X
XXXXXXX..XXX
XXXXXXXXXXXX
输出样例
28
【解题思路】
最短路问题,BFS
【代码实现】
# include <iostream># include <queue>using namespace std;int sx, sy, tx, ty;int num = 0;char mapp[20][20];int dx[5] = {0, 0, 0, 1, -1};int dy[5] = {0, 1, -1, 0, 0};struct zb{ int x, y; int s;}start, end;queue<zb>q;int bfs(void);int main(void){ //freopen("sample.txt", "r", stdin); int i, j; cin >> sx >> sy >> tx >> ty; for (i = 1; i <= 12; ++i) for (j = 1; j <= 12; ++j) cin >> mapp[i][j]; start.x = sx; start.y = sy; end.x = tx; end.y = ty; start.s = 0; mapp[start.x][start.y] = 'X'; q.push(start); num = bfs(); cout << num << endl; return 0;}int bfs(void){ int i; zb t, k; while (!q.empty()) { t = q.front(); q.pop(); for (i = 1; i <= 4; ++i) { k.x = t.x + dx[i]; k.y = t.y + dy[i]; if (k.x == end.x && k.y == end.y) return t.s + 1; if (mapp[k.x][k.y] == '.') { k.s = t.s + 1; q.push(k); mapp[k.x][k.y] = 'X'; } } }}
【心得体会】
对于点坐标的BFS扩展,可以定义结构体
0 0
- NOJ 1042 电子老鼠闯迷宫
- 算法练习-NOJ-1042-电子老鼠闯迷宫
- NOJ(1042)-分支限界-电子老鼠闯迷宫
- 1042 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 内存结构
- HDU 4734 F(x) 【数位DP】
- Android和HTML5混合开发
- JSP中使用正则表达式之match 方法
- ACM深度搜索整理1
- NOJ 1042 电子老鼠闯迷宫
- Ubuntu tomcat8 启动脚本(最简化)
- Linux下Oracle11G64位安装流程
- Canada Cup 2016
- 1. Two Sum&15. 3Sum
- pycharm破解
- 直接用ConcurrentHashMap代替HashMap引发的问题
- 118. Pascal's Triangle
- 283. Move Zeroes