带权值的图 BFS
用bfs遍历最图求最短路径时通常借用优先队列即优先考虑最大的或者最小的权值
方法1 优先队列:(内置函数,优先考虑较小的权值)
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct node{
int x,y,c;
bool friend operator < (node a,node b){
return a.c > b.c;//小的优先出来哦(没错就是大于号)
}
}r,w;
int n;
int dis[+][+];
int vis[+][+];
int ma[+][+];
int d[][]={,,,,-,,,-};
void bfs(int xx,int yy){ //bfs求终点到其余各点的最短路
priority_queue<node> q;
r.x = r.y = xx;
r.c = ma[n-][n-]; //以终点作为起点
dis[n-][n-] = ma[n-][n-];
vis[n-][n-] = ;
q.push(r);
while(!q.empty()){
r = q.top();
q.pop();
for(int i = ; i < ; i++){
int nx = r.x + d[i][];
int ny = r.y + d[i][];
if(nx < || ny < || nx >= n || ny >= n || vis[nx][ny]) continue;
w.x = nx;
w.y = ny;
w.c = r.c + ma[nx][ny];//把点(nx,ny)处的权值加上
vis[nx][ny] = ;//标记
q.push(w);
dis[nx][ny]=w.c;//跟新数组,保证每次都是最优的
}
} }
int main(){
cin>>n;
for(int i=;i< n;i++){
for(int j=;j< n;j++){
cin>>ma[i][j];
}
}
bfs(n-,n-);//这样一来数组里保存的就是其他点到点(n-1,n-1)的距离了;
for(int i=;i<n;i++)
{
cout<<endl;
for(int j=;j<n;j++)
printf("%d ",dis[i][j]);
}
return ; }
方法2:队列加判断条件(开一个数组step,加一个判断条件step [ d x ] [ d y ] > step [x] [y] + mp [dx] [dy] )
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define INF 100000000
using namespace std;
typedef long long ll;
struct stu{
int a,b;
};
int n;
ll arr[][];
ll step[][];
ll dp[][];
int d[][]={,,,,,-,-,};
void bfs(int x,int y){
queue<stu>que;
que.push({x,y});
step[x][y]=arr[x][y];
while(que.size()){
int xx=que.front().a;
int yy=que.front().b;
que.pop();
for(int i=;i<;i++){
int dx=xx+d[i][];
int dy=yy+d[i][];
if(dx>=&&dy>=&&dx<=n&&dy<=n){
if(step[dx][dy]>step[xx][yy]+arr[dx][dy]){
step[dx][dy]=step[xx][yy]+arr[dx][dy];//更新step数组,使他保存较小的的距离
que.push({dx,dy});
}
}
}
}
} int main(){
while(cin>>n)
{
for(int i=;i<=;i++){
for(int j=;j<=;j++)
step[i][j]=INF;
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin>>arr[i][j];
}
}
bfs(n,n);
for(int i=;i<=n;i++){
cout<<endl;
for(int j=;j<=n;j++)
cout<<step[i][j];//数组里的每一个点都是到(n,n)的最短距离
}
}
return ;
}
数据:
3
1 2 3
1 2 3
1 2 3
带权值的图 BFS的更多相关文章
- 51nod1459(带权值的dijkstra)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...
- HDU 1863:畅通project(带权值的并查集)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 洛谷 P2024 [NOI2001]食物链——带权值的并查集维护
先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C-> ...
- 带权值的LCA
例题:http://poj.org/problem?id=1986 POJ1986 Distance Queries Language: Default Distance Queries Time L ...
- nyoj-----284坦克大战(带权值的图搜索)
坦克大战 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" ...
- 【NOIP 2015 D1 T2】信息传递(图论--带权并查集/bfs)
题目:有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学.游戏开始时,每人都只知道自己的生日.之后每一轮中, ...
- hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@' 表示的是起点,'#' 表示的是障碍物不能通过,'.' 表示的是路能通过的: ...
- P - 奔小康赚大钱 - hdu 2255(带权值的匹配)
分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...
- 无向带权图的最小生成树算法——Prim及Kruskal算法思路
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
随机推荐
- DOM中获取元素的节点兼容IE6-8封装,带jquery源码分析children
<ul id="box"> <li>第一个节点</li> <li>第二个节点</li> <li>第三个节点& ...
- Excel知识点与技巧1
1.工作区:方便两个工作表之间进行对比 2.工作表标签颜色 3.交换两列的次序 4.快速到达边界:即快速到达第一行或最后一行 5.冻结窗格:可以固定某几行或某几列一直存在于窗口,不会随着往下拉或往右拉 ...
- CSS3动画的使用以及优化
CSS3 动画 目录 1. 定义动画2. animation 属性3. animation 属性的兼容4. animation与transition 属性的取别5. animate.css 动画库6. ...
- python之常用模块ConfigParser
这个常见于.conf,.ini等类型的配置文件 下面先看一下如果通过python生成一个.ini文件 import configparser #2.x is ConfigParserconfig = ...
- 【Pytest01】全网最全最新的Pytest框架快速入门
一.Pytest简介pytest是一个非常成熟的全功能的Python测试框架,主要有一下几个特点:1.简单灵活,容易上手,支持参数化2.能够支持简单的单元测试和复杂的功能测试,还可以用来做seleni ...
- inux上安装mysql
目录 1.先验证是否安装了mysql 2.先下载mysql的repo源 3.安装mysql rpm包,执行命令: 4.安装mysql,执行命令: 5.登录然后重置密码,执行: 6.执行命令赋权,重启m ...
- Web 环境设置
修改最大打开文件数量 ulimit -n 100000 修改创建文件的最大值 #/etc/security/limits.conf * soft nofile 262140 * hard nofile ...
- 聊起 BigTable,让你不再胆怯
谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,并指明了大数据的发展方向. GFS 作为其中一驾宝车,解决了大数据存储的难题.它能够把大量廉价的普通机器,聚在一起,充分让每台廉价的机器发挥光和热 ...
- win10配置易用命令行
在 win10 下配置易用命令行 win10 相比 Linux 最大的短板之一是命令行. 这篇文章不会将 win10 配置到像Linux那样一行命令解决所有包的安装,只是从最大程度上方便开发. 我们主 ...
- STM32F103ZET6系统定时器SysTick
1.系统定时器SysTick的简介 系统定时器SysTick属于内核外设,内嵌在NVIC中.SysTick是一个24位的向下递减的计数器,计数器根据SysTick的时钟源计数,当SysTick的计数器 ...