用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的更多相关文章

  1. 51nod1459(带权值的dijkstra)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...

  2. HDU 1863:畅通project(带权值的并查集)

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. 洛谷 P2024 [NOI2001]食物链——带权值的并查集维护

    先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C-> ...

  4. 带权值的LCA

    例题:http://poj.org/problem?id=1986 POJ1986 Distance Queries Language: Default Distance Queries Time L ...

  5. nyoj-----284坦克大战(带权值的图搜索)

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Many of us had played the game "Battle city" ...

  6. 【NOIP 2015 D1 T2】信息传递(图论--带权并查集/bfs)

    题目:有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学.游戏开始时,每人都只知道自己的生日.之后每一轮中, ...

  7. hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: ...

  8. P - 奔小康赚大钱 - hdu 2255(带权值的匹配)

    分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...

  9. 无向带权图的最小生成树算法——Prim及Kruskal算法思路

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

随机推荐

  1. 「面试指南」JS数组Array常用算法,Array算法的一般解答思路

    先看一道面试题 在 LeetCode 中有这么一道简单的数组算法题: // 给定一个整数数组 nums 和一个目标值 target, // 请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...

  2. mysql系列-⼀条SQL查询语句是如何执⾏的?

    ⼀条SQL查询语句是如何执⾏的? ⼤体来说,MySQL 可以分为 Server 层和存储引擎层两部分 Server 层 Server 层包括连接器.查询缓存.分析器.优化器.执⾏器等,涵盖 MySQL ...

  3. 详解十大经典机器学习算法——EM算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第14篇文章,我们来聊聊大名鼎鼎的EM算法. EM算法的英文全称是Expectation-maximization al ...

  4. 10.map

    map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现 . map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用. map定义 ...

  5. Xamarin.Forms客户端第一版

    Xamarin.Forms客户端第一版 作为TerminalMACS的一个子进程模块,目前完成第一版:读取展示手机基本信息.联系人信息.应用程序本地化. 功能简介 详细功能说明 关于TerminalM ...

  6. 使用FME平移shapefile文件

  7. 手写一个Promise/A+,完美通过官方872个测试用例

    前段时间我用两篇文章深入讲解了异步的概念和Event Loop的底层原理,然后还讲了一种自己实现异步的发布订阅模式: setTimeout和setImmediate到底谁先执行,本文让你彻底理解Eve ...

  8. Base64编码与解码原理

    Base64编码是使用64个可打印ASCII字符(A-Z.a-z.0-9.+./)将任意字节序列数据编码成ASCII字符串,另有“=”符号用作后缀用途. base64索引表 base64编码与解码的基 ...

  9. 分享一下,PHP实现第四方QQ微信扫码登陆,不接入qq互联以及微信开发者平台就可以实现用户对接鹅厂,phpQQ微信扫码登陆

    自己抓的QQ包以及整合了网上一些已经封装好了的代码具体如下:QQ: <?php class QQ extends Curl_Api { //获取登录验证码 public function QRc ...

  10. python 爬虫之 urllib库

    文章更新于:2020-03-02 注:代码来自老师授课用样例. 一.初识 urllib 库 在 python2.x 版本,urllib 与urllib2 是两个库,在 python3.x 版本,二者合 ...