【模板】Ford单源最短路径
来源:互联网 发布:弟子知罪,愿受师父责罚 编辑:程序博客网 时间:2024/05/19 20:37
题目描述:
用迪杰斯特拉(Dijkstra)算法求单源最短路径,并输出路径(按字典序输出最小的一条)。
输入格式:
第一行而个整数s,t第二行而个整数n,m
以下m行每行三个整数a,b,c,表示a,b之间有边,且边的权值为c
样例输入:
1 35 7
1 2 6
1 4 2
1 5 23
2 3 4
2 4 3
3 4 20
3 5 7
样例输出:
9
1 4 2 3
n,m<=1000
#include<iostream>#include<cstdio>using namespace std;struct abc{int d,p;}k[1000000];int n,m,s,t;int v[1000000],u[1000000],w[10000000];int res[1000000];void reset(){for (int i=1;i<=n;++i){k[i].d=1e9;k[i].p=0;}}void relax(int u,int v,int w){if (k[v].d>k[u].d+w){k[v].d=k[u].d+w;k[v].p=u;}}bool Ford(){reset();k[s].d=0;for (int i=1;i<=n-1;++i)for (int j=1;j<=m;++j){relax(u[j],v[j],w[j]);//relax(v[j],u[j],w[j]);}for (int i=1;i<=m;++i)if (k[v[i]].d>k[u[i]].d+w[i])return false;return true;}int main(){cin >>s>>t>>n>>m;for (int i=1;i<=m;++i)cin >>u[i]>>v[i]>>w[i];if (!Ford()) cout <<"You show me the wrong map!"<<endl;else{cout <<k[t].d<<endl;int p=t,kk=0;while (p!=s){++kk;res[kk]=p;p=k[p].p;}++kk;res[kk]=s;for (int i=kk;i>=1;--i)cout <<res[i]<<' ';}return 0;}
阅读全文
0 0
- 【模板】Ford单源最短路径
- Bellman Ford 单源最短路径
- 单源最短路径---Bellman-Ford
- 最短路径bellman-ford算法模板
- 最短路径算法模板:Dijkstra/Floyd/Bellman-Ford模板
- 单源最短路径Bellman-Ford算法
- 单源最短路径 : Bellman-Ford 算法
- 单源最短路径-Bellman-Ford算法
- Ford算法(单源最短路径)
- 单源最短路径--Bellman-Ford算法
- 单源最短路径-Bellman-Ford算法
- 单源最短路径之Bellman-Ford
- 单源最短路径-Bellman-ford算法
- Bellman-Ford单源最短路径+优化
- Bellman-Ford 单源最短路径算法
- 最短路径算法—Bellman-Ford模板
- Bellman-Ford算法 单源最短路径(o(nm))
- 单源最短路径(bellman-ford 、dijkstra)
- iOS应用提交日志
- html中transform示例
- Android百分比下载进度条
- BZOJ 2049 [Sdoi2008] Cave 洞穴勘测
- objdump -t
- 【模板】Ford单源最短路径
- 在C#中GUID生成的四种格式具体案例
- 常用正则
- au3 窗体透明及半透明
- windows下安装tomcat
- 利用链表完成多项式操作
- history对象与location对象
- mysql如何删除作为外键的数据
- MySql接口API函数综述