Dijkstra算法模板
来源:互联网 发布:淘宝如何做展现词 编辑:程序博客网 时间:2024/05/18 06:04
运用C++STL中list储存图,算法详细介绍在另一篇文章中
#include<iostream>#include<cstring>#include<list>#include<climits>using namespace std;const int M=10000;struct edge{int to;int weight;};list<edge>edges[M];void addEdge(int x,int y,int z){edges[x].push_back((edge){y,z});}void Dijkstra(int s,int n){int vis[M],dis[M];memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)dis[i]=INT_MAX;for(list<edge>::iterator it=edges[1].begin();it!=edges[1].end();it++){dis[it->to]=it->weight;}vis[s]=-1;for(int i=1;i<=n;i++)printf("%d ",dis[i]);printf("\n");for(int i=1;i<=n-1;i++){int Min=INT_MAX,u=-1;for(int w=1;w<=n;w++)if(vis[w]!=-1){if(dis[w]<Min)Min=dis[w],u=w;}if(u!=-1){vis[u]=-1;for(list<edge>::iterator it=edges[u].begin();it!=edges[u].end();it++)if(vis[it->to]!=-1){if(dis[it->to]>(it->weight+dis[u]))dis[it->to]=(it->weight+dis[u]);}}}for(int i=1;i<=n;i++)printf("%d ",dis[i]);printf("\n");return;}int main(){int t;cin>>t;while(t--){int n,s;cin>>n>>s;for(int i=0;i<s;i++){int a,b,c;cin>>a>>b>>c;addEdge(a,b,c);addEdge(b,a,c);}Dijkstra(1,n);}return 0;} /*测试数据15 61 3 11 2 42 3 42 4 22 5 13 5 10结果:2147483647 4 1 6 5 */
阅读全文
0 0
- Dijkstra算法模板
- Dijkstra算法模板
- Dijkstra算法模板
- Dijkstra算法模板
- 朴素Dijkstra算法模板
- Dijkstra算法模板
- Dijkstra算法【模板】
- dijkstra算法模板
- Dijkstra算法 模板
- Dijkstra算法模板
- dijkstra的算法模板
- Dijkstra算法模板
- Dijkstra算法模板
- Dijkstra算法模板
- Dijkstra算法---模板
- Dijkstra算法几大模板
- dijkstra算法模板可优化
- dijkstra算法模板改进版
- sqlserver 去除重复的数据
- 开个博客记录一下球的成长
- 179. Largest Number
- 假身份证的判定
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Dijkstra算法模板
- python实现希尔排序
- Intellij添加Maven模块
- 3.2 Linux C程序解析
- java8之行为参数化(二)
- 习题6-13 电子表格计算器(Spreadsheet Calculator, ACM/ICPC World Finals 1992, UVa215)
- Apache HttpClient4.5(三)
- 第十天 PHP的首次讲课
- jedis连接池及redis封装(util)