[POJ3984]迷宫问题
来源:互联网 发布:mac 允许所有来源 编辑:程序博客网 时间:2024/05/24 03:21
描述
定义一个二维数组:
int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
输入
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
输出
左上角到右下角的最短路径。
思路:求最短路线肯定是BFS了,代码如下:
#include <iostream>#include <string.h>#include <queue> using namespace std; int map[5][5];int visited[5][5];char direction[5][5]; struct Step{ int x; int y; Step(int _x, int _y):x(_x), y(_y){}}; queue<Step> q; void print(){ cout << "(0, 0)" << endl; int x=0, y=0; while (x != 4 || y != 4) { char c = direction[x][y]; if (c == 'u') x -= 1; else if (c == 'd') x += 1; else if (c == 'l') y -= 1; else if (c == 'r') y += 1; cout << "(" << x << ", " << y << ")" << endl; }} int main(){ std::ios::sync_with_stdio(false); for (int i=0; i<5; i++) for (int j=0; j<5; j++) cin >> map[i][j]; memset(visited, 0, sizeof(visited)); q.push(Step(4, 4)); visited[4][4] = 1; while (!q.empty()) { Step s = q.front(); if (s.x == 0 && s.y == 0){ print(); return 0; } else { if (s.x-1 >=0 && !visited[s.x-1][s.y] && !map[s.x-1][s.y]) { q.push(Step(s.x-1, s.y)); visited[s.x-1][s.y] = 1; direction[s.x-1][s.y] = 'd'; } if(s.y-1 >=0 && !visited[s.x][s.y-1] && !map[s.x][s.y-1]) { q.push(Step(s.x, s.y-1)); visited[s.x][s.y-1] = 1; direction[s.x][s.y-1] = 'r'; } if (s.x+1 <=4 && !visited[s.x+1][s.y] && !map[s.x+1][s.y]) { q.push(Step(s.x+1, s.y)); visited[s.x+1][s.y] = 1; direction[s.x+1][s.y] = 'u'; } if (s.y+1 <=4 && !visited[s.x][s.y+1] && !map[s.x][s.y+1]) { q.push(Step(s.x, s.y+1)); visited[s.x][s.y+1] = 1; direction[s.x][s.y+1] = 'l'; } q.pop(); } } return 0;}
0 0
- POJ3984 迷宫问题 BFS
- POJ3984 迷宫问题
- HUD--POJ3984 迷宫问题
- POJ3984 迷宫问题 BFS
- poj3984 迷宫问题
- poj3984(迷宫问题)
- poj3984 迷宫问题
- [POJ3984]迷宫问题
- poj3984 迷宫问题(BFS)
- POJ3984 迷宫问题
- POJ3984 迷宫问题【BFS】
- poj3984 迷宫问题
- Poj3984- dfs -迷宫问题
- poj3984迷宫问题(bfs)
- poj3984迷宫问题
- poj3984 迷宫问题
- poj3984迷宫问题
- POJ3984 迷宫问题【BFS】
- Lambda 表达式(C# 编程指南)
- MFC扩展界面库Ultimate Toolbox的编译
- 【机房收费系统 2】:上机时间和消费金额
- SPOJ ICODER
- 上班族该知道的秘密:功劳与苦劳的价值表
- [POJ3984]迷宫问题
- 基于1.3.3版本tooltip的datagrid单元格tip实现
- Web应用的缓存设计模式
- 子集
- STL vector中的reserve()方法(15)
- java学习总结
- BCG界面库的设置浮动工具栏位置教程
- Lambda表达式及其优势
- WireShark使用总结