Dijikstra(单源最短路径)
来源:互联网 发布:广州多益网络怎么样 编辑:程序博客网 时间:2024/06/04 01:16
Dijikstra(单源最短路径)
求无向图中两点间的最短路径
时间复杂度O(N2)
代码
#include<stdio.h>#include<stdlib.h>#define max 100#define maxint 32767typedef struct Node{ int map[max][max]; //邻接表 int n; //顶点数 }Adjacency_list;/*************table邻接表v0:源点 dist为个点距离v0最小路径path记录最短路径节点的上个点*************/ void dijikstra(Adjacency_list table,int *dist,int *path,int v0){ int i; bool *visited = (bool *) malloc(sizeof(bool) * table.n); //初始化 for(i = 0;i < table.n;i++) { if(table.map[v0][i] > 0) { dist[i] = table.map[v0][i]; path[i] = v0; } else { dist[i] = maxint; path[i] = -1; } visited[i] = false; } dist[v0] = 0; visited[v0] = true; int j; int min; int u; int temp; for(i = 0;i < table.n - 1;i++) { min = maxint; //寻找未被加入路径的最短结点 for(j = 0;j < table.n;j++) { if(visited[j] == false && dist[j] < min) { min = dist[j]; u = j; } } visited[u] = true; for(j = 0;j < table.n;j++) //更新dist路径 { temp = dist[u] + table.map[u][j]; if(visited[j] == false && table.map[u][j] > 0 && dist[j] > temp ) { dist[j] = temp; path[j] = u; } } }}int show(int v0,int n,int *path){ if(path[n] == v0) { printf("%d ",n); return 0; } else { show(v0,path[n],path); printf("%d ",n); }}int main(){ int i; int j; int n; int m; int p,q,value; int v0; int vn; scanf("%d%d",&n,&m); int *dist = (int *) malloc(sizeof(int ) * n); int *path = (int *)malloc(sizeof(int) * n); Adjacency_list t; t.n = n; for(i = 0;i < n;i++) { for(j = 0;j < n;j++) { t.map[i][j] = 0; } } for(i = 0;i < m;i++) { scanf("%d%d%d",&p,&q,&value); t.map[p][q] = value; t.map[q][p] = value; } scanf("%d",&v0); dijikstra(t,dist,path,v0); scanf("%d",&vn); show(v0,vn,path); printf(" %d",dist[vn]); return 0;}
0 0
- Dijikstra(单源最短路径)
- 最短路径(Dijikstra和Floyed)
- HDU 3790最短路径问题 dijikstra算法
- poj 2457 Part Acquisition最短路径dijikstra迪杰斯特拉
- 最短路径算法(上)——迪杰斯特拉(Dijikstra)算法
- 迷宫问题 与 最短路径 怎样记录路径的总结(dijikstra,bfs,floyd,优先队列)
- 堆排序,Dijikstra算法和C#
- BZOJ 2763 [JLOI2011]飞行路线 Dijikstra
- codeforces 567E President and Roads Dijikstra
- HDU 2066 一个人的旅行dijikstra算法
- HDU 2544最短路 dijikstra算法
- hdu2066 一个人的旅行(dijikstra算法)
- 第十三周--dijikstra算法的验证
- 1003. Emergency (25)(dijikstra+DFS)
- bzoj 2763 [JLOI2011]飞行路线 Dijikstra 分层
- 自己都看不懂的dijikstra实现zzz……
- BZOJ 1097 [POI2007]旅游景点atr dijikstra+状压DP
- 【图论】【单源最短路】【dijikstra】pascal+邻接矩阵/边集数组
- CSU 1633: Landline Telephone Network (最小生成树)
- nios ii常用函数整理
- openstack metadata
- hibernate-不能保存数据到数据库(数据不能持久化)
- AutoLayout(二)
- Dijikstra(单源最短路径)
- C# sort 委托使用
- ASP.NET实现微信功能(1)(创建菜单,验证,给菜单添加事件)
- android页面切换
- java数据结构之二叉树的遍历
- java 错误
- Python中的注释
- 小混混自我提高篇——思考
- 网易商业智能研究员笔试——算法题