Dijkstra算法(单源最短路径)
来源:互联网 发布:dota2天梯淘宝买账号 编辑:程序博客网 时间:2024/05/01 15:56
Dijkstra算法(单源最短路径)
一.最短路径的最优子结构性质
二.Dijkstra算法
假设存在G=<V,E>,源顶点为V0,U={V0},dist[i]记录V0到i的最短距离,path[i]记录从V0到i路径上的i前面的一个顶点。
1.从V-U中dist[i]值最小的顶点i,将i加入到U中;
2.更新与i直接相邻顶点的dist值。(dist[j]=min{matrix[V0][j],dist[i]+matrix[i][j]})
3.知道U=V,停止。
#include <stdio.h>#include<string.h>#define MAX 201#define INF 100000int map[MAX][MAX];int min[MAX];int n, m;void dij(int src){ int v[MAX]; int i, j, k; for (i=0; i<n; ++i){ v[i] = 0; min[i] = INF; } for (min[src]=0, i=0;i<n; ++i){ for (k=-1, j=0;j<n; ++j){ if (!v[j]&& (k == -1 || min[j] < min[k])) k = j; } for (v[k]=1, j=0;j<n; ++j){ if (!v[j]&& min[k] + map[k][j] < min[j]) min[j] = min[k] + map[k][j]; } }}int main(){ int i, j; int a, b, x; int s, t; while (~scanf("%d%d", &n,&m)){ for (i=0; i<n; ++i) for (j=0; j<n; ++j) map[i][j] = INF; for (i=0; i<m; ++i){ scanf("%d %d %d", &a,&b, &x); if (x <map[a][b]) map[a][b] = map[b][a] = x; } scanf("%d %d", &s,&t); dij(s); if (min[t] == INF) printf("-1\n"); else printf("%d\n", min[t]); } return 0;}
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra算法)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- DijKstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(dijkstra算法)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra)算法
- Dijkstra算法(单源最短路径)
- linux磁盘管理二之磁盘配额
- 2072Count(foj)
- 1002 hdu (高精度)
- Common Subsequence(hdu 1159)
- 最长公共子序列
- Dijkstra算法(单源最短路径)
- hdu(Number Sequence 1711)kmp
- hdu1025(最长上升子序列)
- Monkey and Banana hdu(1069)
- 报错:Link of class 'Lcom/.../PersistentConnectionListener;' failed ...VFY: unable to resolve new-insta
- A Problem With Fibonacci Sequence
- nginx常见错误---持续更新
- Similar Word
- The Frog’s Games(hdu 4004)