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

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

输入格式

第一行包含整数n和m。

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

输出格式

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

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

数据范围

1≤n≤5001≤n≤500,
1≤m≤1051≤m≤105,
图中涉及边长均不超过10000。

输入样例:

3 3
1 2 2
2 3 1
1 3 4

输出样例:

3

使用条件:
单源最短路
无负边条件

朴素 Dijkstra 算法

因为n与m差太多,是个稠密图,所以用邻接矩阵来存

稀疏图用邻接表存

#include<iostream>
#include<algorithm>
#include<cstring> using namespace std; //500个点 1e5条边,所以用邻接矩阵来写
const int N = 510; int n,m;
int g[N][N];//邻接矩阵
int dist[N];//dijkstra的距离,表示从1到n的最短距离,当前的最短距离
bool st[N];//表示每个点的最短路是否确定 //边权为正所以不可能存在自环,重边的话只用保留两条边长度最短的那条边 int dijkstra(){ //首先初始化距离,初始化为正无穷
memset(dist,0x3f,sizeof dist);
//一号点的距离初始化为0
dist[1] = 0; //迭代n次,找最短路
for(int i = 0;i < n;i++){
//每一次第一步先找到在每一次还没确定的最短路长度的点当中,距离最小的那一个路径长度
int t = -1;//表示还没有确定 //遍历所有的点
for(int j = 1;j <= n;j ++)
//如果当前这个点还没有确定最短路的话
//并且
//当前的点还没确定 或者 当前的t不是最短的距离
if(!st[j] && (t == -1 || dist[t] > dist[j]))
t = j; st[t] = true; //用t来更新其他点的距离
for(int j = 1;j <= n;j++)
//用1~t的距离加上t~j的这个边,来更新1~j这条边
dist[j] = min(dist[j],dist[t] + g[t][j]);
} //1~n是不连通的
if(dist[n] == 0x3f3f3f3f) return -1;
//否则返回1~n的最短距离
return dist[n];
} int main(){
scanf("%d%d",&n,&m); //初始化邻接矩阵
// for(int i = 0;i <= n;i++)
// for(int j = 0;j <= n;j++){
// if(i == j) g[i][j] = 0;
// else g[i][j] = INF;
// } memset(g,0x3f,sizeof g); while(m --){
int a,b,c;
scanf("%d%d%d",&a,&b,&c); g[a][b] = min(g[a][b],c);//取min原因是a,b之间可能会有多条边,保留边的最短距离
} int t = dijkstra(); printf("%d\n",t);
return 0;
}

  

849. Dijkstra求最短路 I的更多相关文章

  1. ACM - 最短路 - AcWing 849 Dijkstra求最短路 I

    AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...

  2. 849. Dijkstra求最短路 I(模板)

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...

  3. AcWing 849. Dijkstra求最短路 I 朴素 邻接矩阵 稠密图

    //朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algori ...

  4. acwing 849 Dijkstra求最短路 I 模板

    地址 https://www.acwing.com/problem/content/description/851/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出 ...

  5. 关于dijkstra求最短路(模板)

    嗯....   dijkstra是求最短路的一种算法(废话,思维含量较低,   并且时间复杂度较为稳定,为O(n^2),   但是注意:!!!!         不能处理边权为负的情况(但SPFA可以 ...

  6. Aizu-2249 Road Construction(dijkstra求最短路)

    Aizu - 2249 题意:国王本来有一个铺路计划,后来发现太贵了,决定删除计划中的某些边,但是有2个原则,1:所有的城市必须能达到. 2:城市与首都(1号城市)之间的最小距离不能变大. 并且在这2 ...

  7. 850. Dijkstra求最短路 II

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...

  8. POJ-2387(原始dijkstra求最短路)

    Til the Cows Come Home POJ-2387 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是\(O(n^2)\). 需要注意的是,一定要看清楚题目的输入要 ...

  9. Dijkstra求次短路

    #10076.「一本通 3.2 练习 2」Roadblocks:https://loj.ac/problem/10076 解法: 次短路具有一种性质:次短路一定是由起点到点x的最短路 + x到y的距离 ...

随机推荐

  1. JS专题-FormData

    var formData = new FormData(); <form id="coords" class="coords" onsubmit=&quo ...

  2. 【收藏】每天更新!全网热门公共BT种子 BitTorrent Tracker 列表合集

    每天更新!全网热门公共 BitTorrent Tracker 列表合集. 该项目仅将全网热门的公共 Tracker 列表制作成合集方便大家使用,无需再一个个导入了~. 「English」(tracke ...

  3. ILSVRC2012下载

    http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_test.tarhttp://www.image-net.or ...

  4. org.springframework.web.util.UriComponentsBuilder

    import org.springframework.web.util.UriComponentsBuilder; UriComponentsBuilder.fromHttpUrl("htt ...

  5. embed标签属性

    embed标签属性   (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,    Netscape及新版 ...

  6. set_include_path详细解释(转)

    首先我们来看这个全局变量:__FILE__它表示文件的完整路径(当然包括文件名在内)也就是说它根据你文件所在的目录不同,有着不同的值:当然,当它用在包行文件中的时候,它的值是包含的路径: 然后:我们看 ...

  7. 达梦、oracel、mysql数据库兼容

    联合表更新sql语句: 只支持mysql.oracle,不支持达梦 update to_pub_report a, to_pub_rec_process b set a.Satisfy_ID , a. ...

  8. 博客框架 Hexo: 3.9.0 及主题 NexT 6.x.x 基本操作

    文章大纲 1. 不同代码仓库部署 coding 部署方式 项目名称 配置 SSH 公钥访问 git 仓库 github 码云 2. 手动cdn,智能解析 3. 添加评论系统 4. 博客置顶 5. 页脚 ...

  9. LGOJ3804 【模板】后缀自动机

    题目链接: link 题目大意 给定一个只包含小写字母的字符串\(S\), 请你求出 \(S\) 的所有出现次数不为 \(1\) 的子串的出现次数乘上该子串长度的最大值. Solution 预处理出每 ...

  10. LGOJ3975 TJOI2015 弦论

    link:TJOI2015 弦论 题目大意: 给定一个字符串,输出在对该字符串所有的非空子串排序后第\(k\)个 另外的一个限制是\(T\):子串本质相同但位置不同算\(1\)或多个 \(|s| \l ...