图论基础--最短路模板_图论最短路模板-程序员宅基地

技术标签: 算法  c++  最短路  图论  

题目选自ACwing
Dijkstra最短路:

给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。

请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。

输入格式
第一行包含整数n和m。

接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。

输出格式
输出一个整数,表示1号点到n号点的最短距离。

如果路径不存在,则输出-1。

数据范围
1≤n≤500,
1≤m≤105,
图中涉及边长均不超过10000。

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=510;

int n,m;
int g[N][N];
int dist[N];
bool st[N];

int dijkstra()
{
    
    memset(dist,0x3f,sizeof dist);
    dist[1]=0;
    for(int i=0;i<n-1;i++)
    {
    
        int t=-1;
        for(int j=1;j<=n;j++)
        {
    
            if(!st[j]&&(t==-1||dist[t]>dist[j])) t=j;
        }
        for(int j=1;j<=n;j++)
            dist[j]=min(dist[j],dist[t]+g[t][j]);
        st[t]=true;
    }
    if(dist[n]==0x3f3f3f3f) return -1;
    else return dist[n];
}
int main(){
    
    memset(g,0x3f,sizeof g);
    //freopen("data.in","r",stdin);
    //freopen("data.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
    
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]=min(g[a][b],c);
    }    
    cout<<dijkstra()<<endl;
    return 0;
}

floyed最短路:

给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。

再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。

数据保证图中不存在负权回路。

输入格式
第一行包含三个整数n,m,k

接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。

接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。

输出格式
共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出“impossible”。

数据范围
1≤n≤200,
1≤k≤n2
1≤m≤20000,
图中涉及边长绝对值均不超过10000。

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N=310;
const int INF=0x3f3f3f3f;
int g[N][N];

int n,m,k;

void floyed()
{
    
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}
int main(){
    
    //freopen("data.in","r",stdin);
    //freopen("data.out","w",stdout);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
    
            if(i==j) g[i][j]=0;
            else g[i][j]=INF;
        }
    for(int i=0;i<m;i++)
    {
    
        int x,y,z;
        cin>>x>>y>>z;
        g[x][y]=min(g[x][y],z);
    }
    floyed();
    while(k--)
    {
    
        int a,b;
        cin>>a>>b;
        if(g[a][b]>INF/2) puts("impossible");
        else cout<<g[a][b]<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44196094/article/details/102637751

智能推荐

如何获取别的进程的TreeView控件的内容_delphi 跨进程获取treeview内容-程序员宅基地

文章浏览阅读1.9k次。extern "C" long EXPORT __stdcall GetRootItem (long Thwnd,char *filestr) { TVITEM tvi, *_tvi; char *_item; char item[256]; unsigned long pid; HANDLE process; long ret=(long)((CTreeCtrl*)CWnd::_delphi 跨进程获取treeview内容

Git中config配置_git config-程序员宅基地

文章浏览阅读3.2k次,点赞42次,收藏22次。git的config配置_git config

可编辑div contenteditable = “true“限制字数输入框_利用contenteditable实现textarea即支持tags标签也支持文本的实现方式-程序员宅基地

文章浏览阅读7.8k次,点赞6次,收藏9次。<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style> .main { position: relative; ..._利用contenteditable实现textarea即支持tags标签也支持文本的实现方式

C#连接Access数据库,C#操作Access数据库-程序员宅基地

文章浏览阅读300次,点赞9次,收藏10次。C#连接Access数据库,C#操作Access数据库

系统平均负载(Load average)与CPU利用率_uptime load average 转换成cpu-程序员宅基地

文章浏览阅读3k次。在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。通过下面的几个部分的了解,可以一步一步的找出Load Averag_uptime load average 转换成cpu

商城购物系统软件测试,网上商城购物系统黑盒测试-程序员宅基地

文章浏览阅读5.3k次,点赞2次,收藏35次。《网上商城购物系统黑盒测试》由会员分享,可在线阅读,更多相关《网上商城购物系统黑盒测试(7页珍藏版)》请在人人文库网上搜索。1、网上商城购物系统黑盒测试一、目的和意义软件测试是软件工程中非常重要的环节,是软件质量的保证。该课程是培养训练学生软件质量保证能力的重要实践性教学环节,与软件测试技术课程的教学内容紧密配合,同步进行。通过软件测试的实践训练,深刻理解和掌握软件测试和软件测试过程的基本方法和基..._对指定电子商务网站的接受订单的网页创建功能测试,根据动态黑盒测试方法设计

随便推点

linux ssh 免登录设置_linux设置免登陆-程序员宅基地

文章浏览阅读711次。使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了。步骤如下_linux设置免登陆

nrm运行出错internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value);_internal/validators.js:124 14:47:45.642 throw new -程序员宅基地

文章浏览阅读388次。学习Vue.js过程中,安装并运行nrm时出现的错误笔记:// const NRMRC = path.join(process.env.HOME, '.nrmrc');const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');在nrm安装目录下,找到cli.js文件,修改:注释掉第十七行,改为上述代码未注释的即可;..._internal/validators.js:124 14:47:45.642 throw new err_invalid_arg_type(name,

Android WindowManager悬浮窗动画效果-程序员宅基地

文章浏览阅读1.3k次。为什么80%的码农都做不了架构师?>>> ..._android 悬浮窗出现动画

L1-007 念数字 (10 分) python_输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应-程序员宅基地

文章浏览阅读2.1k次,点赞7次,收藏2次。输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:0: ling1: yi2: er3: san4: si5: wu6: liu7: qi8: ba9: jiu输入格式:输入在一行中给出一个整数,如:1234。提示:整数包括负数、零和正数。输出格式:在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空..._输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应

Atlas实践-程序员宅基地

文章浏览阅读327次。Atlas简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大..._atlas检测down

C4.5决策树代码详细解析以及C4.5程序调用(正确的代码!!!)_c语言训练决策树回归器代码-程序员宅基地

文章浏览阅读1.7w次,点赞17次,收藏92次。正确的代码传上来了,对上一篇博客中刚提到的几点错误做了更改,都是一些比较小的细节,可能不仔细看看不出来,可以和上文对比一下....不过本次用了新的数据集用来生成决策树,亲测正确!数据集也会放上来....._c语言训练决策树回归器代码

推荐文章

热门文章

相关标签