【挑战程序设计竞赛】之 迷宫的最短路径
来源:互联网 发布:brpc java 编辑:程序博客网 时间:2024/05/17 12:48
挑战程序设计竞赛之 迷宫的最短路径
考察BFS。
因为要向4个不同的方向移动,用dx[4]和dy[4]两个数组来表示四个方向向量,然后通过一个循环可以实现四个方向的移动。
完整代码如下:
#include<iostream>#include<queue>#define MAX_N 100#define MAX_M 100using namespace std;const int INF=100000000;typedef pair<int,int>P;char maze[MAX_N][MAX_M+1];int N,M;int sx,sy;int gx,gy;int d[MAX_N][MAX_M];int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};int bfs(){ queue<P> que; for(int i=0;i<N;++i) for(int j=0;j<M;++j) d[i][j]=INF; 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]; if(nx>=0&&nx<N&&ny>=0&&ny<M&&maze[nx][ny]!='#'&&d[nx][ny]==INF) { que.push(P(nx,ny)); d[nx][ny]=d[p.first][p.second]+1; } } } return d[gx][gy];}void solve(){ int res=bfs(); cout<<res<<endl;}int main(){ cin>>N>>M; cin>>sx>>sy>>gx>>gy; for(int i=0;i<N;++i) for(int j=0;j<M;++j) cin>>maze[i][j]; solve(); return 0;}
参考书籍:《挑战程序设计竞赛》
0 0
- 【挑战程序设计竞赛】之 迷宫的最短路径
- 挑战程序设计竞赛 2.1迷宫的最短路径
- 《挑战程序设计竞赛》P34迷宫的最短路径
- 广度优先搜索 《挑战程序设计竞赛》——迷宫的最短路径
- 程序设计:迷宫的最短路径
- 《挑战程序设计比赛》 P35 题目:迷宫的最短路径 广度搜索
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 迷宫的最短路径
- 挑战程序竞赛系列(11):2.5最短路径
- 迷宫的最短路径之BFS算法
- 小白书之迷宫最短路径bfs
- A1094. The Largest Generation (25)
- 微服务 系统交互服务注册于发现
- 对于sublime2中nodejs死活输出不了中文的问题解决方案
- Spring JdbcTemplate方法详解
- pentaho7.0安装配置 (二)
- 【挑战程序设计竞赛】之 迷宫的最短路径
- RecyclerView实现图片瀑布流
- Linux网络配置文件
- 对话框加载PNG背景图片
- PHP7新特性
- 2.css中position属性absolute与relative
- C# Default使用
- Ubuntu恢复被删除的文件
- java设计模式之结构模型模式