挑战程序设计竞赛 2.1迷宫的最短路径
来源:互联网 发布:vue组件引用js插件 编辑:程序博客网 时间:2024/06/05 04:32
迷宫的最短路径
给定一个大小为N*M 的迷宫,迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四个格的通道移动。请求出从起点到终点所需要的最小步数,请注意,本体假设从起点一定可以移动到终点。
限制条件:N,M <= 100
输入:
#S######. #
.. . . . . # . . #
.# . ## . ##.#
.# . . . . . . . .
##.## . ####
.. . . # . . . .#
.#######. #
.. . . # . . . . .
.#### . ### .
.. . . # . . .G#
输出
22
#include <iostream>#include <queue> using namespace std; #define MAX_N 10#define MAX_M 10 const int INF = 100000000; typedef pair<int ,int> P; char maze[MAX_N][MAX_M+1] ={ { '#', 'S', '#' , '#','#', '#', '#', '#', '.', '#'}, { '.', '.', '.' , '.','.', '.', '#', '.', '.', '#'}, { '.', '#', '.' , '#','#', '.', '#', '#', '.', '#'}, { '.', '#', '.' , '.','.', '.', '.', '.', '.', '.'}, { '#', '#', '.' , '#','#', '.', '#', '#', '#', '#'}, { '.', '.', '.' , '.','#', '.', '.', '.', '.', '#'}, { '.', '#', '#' , '#','#', '#', '#', '#', '.', '#'}, { '.', '.', '.' , '.','#', '.', '.', '.', '.', '.'}, { '.', '#', '#' , '#','#', '.', '#', '#', '#', '.'}, { '.', '.', '.' , '.','#', '.', '.', '.', 'G', '#'},}; int N = 10, M = 10;int sx = 0;int sy = 1;int gx = 9;int gy = 8;int d[MAX_N][MAX_M];int dx[4] = {1, 0, -1, 0}, dy[] = { 0, 1, 0, -1}; int bfs(){ queue<P> que; // 初始化所有距离为INF for( int i = 0; i < N;i++) { for( int j = 0; j <M; j++) { d[i][j] = INF; } } // 将起点加入队列,并将这一点的距离设置为0 que.push(P(sx, sy)); d[sx][sy] = 0; while( que.size()) { P p = que.front();que.pop(); if(p.first == gx&& p.second == gy) break; // 向四个方向循环 for( int i = 0; i <4; i++ ) { // 移动之后的坐标 int nx = p.first +dx[i]; int ny = p.second+ dy[i]; // 判断是否可以移动以及是否已经访问过(d[nx][ny] != INF即已经访问过) if(0<= nx&& nx < N && 0 <= ny && ny < M &&maze[nx][ny] != '#' && d[nx][ny] == INF) { // 可以移动的话,将它加入队列,并且到达该位置的距离确定为到p的距离+1 que.push(P(nx,ny)); d[nx][ny] = d[p.first][p.second]+ 1; } } } return d[gx][gy];} int main(){ int res = bfs(); cout <<"Result: " << res << endl; return 0;}
这里很神奇的用到了一个pair,pair相当于一个结构体,可以将每个点的坐标记录下来。
bfs搜索到的结果按照bfs的过程,就是该题目的最短路径。
0 0
- 挑战程序设计竞赛 2.1迷宫的最短路径
- 《挑战程序设计竞赛》P34迷宫的最短路径
- 【挑战程序设计竞赛】之 迷宫的最短路径
- 广度优先搜索 《挑战程序设计竞赛》——迷宫的最短路径
- 程序设计:迷宫的最短路径
- 《挑战程序设计比赛》 P35 题目:迷宫的最短路径 广度搜索
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 挑战程序竞赛系列(11):2.5最短路径
- 《挑战程序设计竞赛》2.1最基础的“穷竭搜索”
- 《挑战程序设计竞赛》2.1 最基础的“穷竭算法“
- DataTable源代码分析(一)
- shell脚本中的关于数值计算的命令
- 数据库中对表的操作
- NOJ[1272] Smart Cat
- java基础——RPC
- 挑战程序设计竞赛 2.1迷宫的最短路径
- Java中仿照C#代理
- 命名管道进程通信
- The 14th Zhejiang University Programming Contest(未完工)
- A20 文件系统预装APK
- Aizu 1315 Gift from the Goddess of Programming
- linux下多个节点ssh互相免密码连接详解
- NYOJ_14会场安排问题(不相交区间)
- DB2创建表 主键自增长