NOJ(1042)-分支限界-电子老鼠闯迷宫
来源:互联网 发布:折弯机模具规格算法 编辑:程序博客网 时间:2024/06/05 17:31
描述:
有一只电子老鼠被困在如下图所示的迷宫中。这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。现给定一个起点S和一个终点T,求出电子老鼠最少要几步从起点走到终点。
输入:
本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标S(x.y)和终点的坐标T(x,y)。从第二行开始的12行中,每行有12个字符,描述迷宫的情况,其中’X’表示建筑物,’.’表示路.
输出:
输出一个整数,即电子老鼠走出迷宫至少需要的步数。
输入样例:
输出样例:
28
#include <iostream>#include <queue>using namespace std;struct cor{ int x; int y; int s;} start, endd;//定义结构体存储信息queue<cor> q;char table[20][20];int num = 0;//坐标变换int dx[5] = {0, 1, 0, -1, 0};int dy[5] = {0, 0, 1, 0, -1};int main(){ int i, j; int sx, sy, ex, ey; cor u, v; cin >> sx >> sy >> ex >> ey; for ( i = 1; i <= 12; i++ ) for ( j = 1; j <= 12; j++ ) cin >> table[i][j]; start.x = sx; start.y = sy; endd.x = ex; endd.y = ey; //最短路径中不应该存在重复的坐标,否则不是最短路径 //每次把加入到队列中的最短路径对应的坐标标记 start.s = 0; table[start.x][start.y] = 'X'; q.push ( start ); while ( !q.empty() ) { u = q.front(); q.pop(); for ( i = 1; i <= 4; i++ ) { v.x = u.x + dx[i]; v.y = u.y + dy[i]; //结构体之间只能元素分别对应相等,不能结构体之间相等 if ( v.x == endd.x && v.y == endd.y ) num = u.s + 1; else if ( table[v.x][v.y] == '.' ) { v.s = u.s + 1;//先记录步数,再入队列 q.push ( v ); table[v.x][v.y] = 'X'; } } } cout << num << endl; return 0;}
总结
- 灵活使用结构体存储信息
- 求解最短路径需要注意标记已走过的路迹
阅读全文
0 0
- NOJ(1042)-分支限界-电子老鼠闯迷宫
- NOJ 1042 电子老鼠闯迷宫
- 算法练习-NOJ-1042-电子老鼠闯迷宫
- 1042 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 电子老鼠闯迷宫
- 有趣的机器学习
- PL0扩展(数组,if-else,注释)
- Fluent Mesh .msh文件说明
- JAVA 内存模型
- android NDK——搭建Android Studio的NDK环境
- NOJ(1042)-分支限界-电子老鼠闯迷宫
- Python读写文件
- 四、支持向量机
- Deeplearning4j 实战 (12):Mnist替代数据集Fashion Mnist在CNN上的实验及结果
- Incorrect column count: expected *, actual *
- 【头条】思科:不想让别人动你的奶酪?那就享受变化吧!
- Net-snmp总结(三)-net-snmp的MIBs扩展_添加get
- 夫妻吵架还可以吵得这么优雅,这18个字我们一起学习,共勉
- Keras CNN卷积神经网络(三)