算法题:BFS之出门最佳
来源:互联网 发布:声鉴图用什么软件做 编辑:程序博客网 时间:2024/05/22 03:05
题目:
思路:
1.先根据输入的机器辐射值对房屋内的点进行辐射标记,若在辐射范围内,则标记为-1,不在辐射范围的标记为0;
2.从出发点开始进行广度优先遍历,并不断的更新当前路径长,结束条件为到达出口或遍历结束;
注意:ray数组有两个作用,刚开始用来标记辐射值,开始遍历后用来记录当前路径长;
代码:
#include <iostream>using namespace std;int adj[4][2]={0,1,0,-1,1,0,-1,0};//用来四个方向遍历typedef struct{int x,y;}room;void process(int n, int m, int i, int j, int**r){if (i>=0 && i<n && j>=0 && j<m){r[i][j]=-1;//辐射标记}}int BFS(int n, int m, room b,room e,int** ray){queue<room> Q;room beginroom;beginroom.x=b.x;beginroom.y=b.y;if (ray[b.x][b.y]==-1){return -1;}Q.push(beginroom);while(!Q.empty()){room curroom = Q.front();Q.pop();if (curroom.x==e.x && curroom.y==e.y)return ray[e.x][e.y];//到达出口for(int i=0;i<4;i++){int tx=curroom.x + adj[i][0];int ty=curroom.y + adj[i][1];if (tx>=0 && tx<n && ty>=0 && ty<m){if (ray[tx][ty]!=-1)//安全区{room nextroom;nextroom.x=tx;nextroom.y=ty;if(ray[tx][ty]==0)//之前未访问过 ray[tx][ty]=ray[curroom.x][curroom.y]+1;else//之前访问过ray[tx][ty]=min(ray[tx][ty],ray[curroom.x][curroom.y]+1);Q.push(nextroom);}}}}return -1;//没有找到出口}int main( ){int n;//行while (cin>>n){int m;//列cin>>m;room b,e;cin>>b.x;cin>>b.y;cin>>e.x;cin>>e.y;int **ray = new int*[n];//辐射数组int v;for (int i=0;i<n;i++){ray[i] = new int[m]();for (int j=0;j<m;j++){cin>>v;for (int k=0;k<v;k++){process(n,m,i+k,j,ray);if (v==1) break;process(n,m,i-k,j,ray);process(n,m,i,j+k,ray);process(n,m,i,j-k,ray);}}}int ans = BFS(n,m,b,e,ray);cout<<ans<<endl;
}return 0;}
阅读全文
0 0
- 算法题:BFS之出门最佳
- 算法入门之BFS
- 出门
- 图算法三之BFS
- 图算法之bfs/dfs
- BFS算法之求单源最短路径
- 基础算法 之 BFS & DFS
- 梦想之路(一):走出门,去追梦
- iOS出门必备之CoreAnimation(核心动画)
- 八数码之 ①暴力BFS+哈希表版 ②双向BFS+输出最佳方案版
- 1.7算法入门之最佳存款方案
- 【算法模板之DFS和BFS】
- 算法笔记之DFS与 BFS
- 算法之路(三)——BFS
- 图算法之bfs、dfs、prim、Dijkstra
- C++--图算法之DFS,BFS,Dijstra
- 图算法一之广度搜索(bfs)
- NUPT- BFS 算法题1048
- JetBrains phpsteam websteam Intellij注册码
- git安装后配置个人的账号信息
- Linux分区问题
- 匿名函数自执行
- HDU 1203 乘法 01背包
- 算法题:BFS之出门最佳
- n个元素进栈,共有多少种出栈顺序?
- Java的三种代理模式
- Spring中Bean的property,ref引发的小问题
- 使用 Diff 和 Meld 工具比较两个目录的不同处
- tf.nn.sparse_softmax_cross_entropy_with_logits()函数的用法
- Scala III
- Qt+VS2008打包程序 | 显示中文乱码
- Java语言组成基础——需要格外注意的问题