Dijkstra用来寻找图的结点间最短路径,通常是指定一个起始结点后,寻找从该结点出发,到达各个结点的最短路径。该算法是有关最短路径问题的一个算法。由Dijkstra于1959年提出。
百度百科:。
维基百科:。
参考链接:。
程序说明:图存储在二维数组中,即邻接矩阵中。使用s集合和vs集合辅助Dijkstra算法的过程,开始时将指定的开始结点放入s集合中,其他剩余的结点放入vs集合中,从s集合到vs集合的边中找出一个代价最小的边,然后将相关的结点从vs集合取出放入s集合,指定所有结点都在s集合为止。
中间结果和最后结果放在数组dist[]中。
程序:
/* Dijkstra算法程序 */#define MAX_INT (int)((unsigned)(-1) >> 1)#define MIN(x, y) ((x)>(y))?(y):(x)#define TRUE 1#define FALSE 0#include//假设有N个节点其中包含1个源点,N-1个终点求源点到其他节点的最短路径#define N 6int a[N][N];int dist[N];int prev[N];int s_set[N], s_count;int vs_set[N], vs_count;void createMatrix();void init(int s);void dijkstra();int main(void){ int i, j, s; createMatrix(); for(i=0; i =0 && s<=N-1) { init(s); } else printf("input error!\n"); printf("first distance:\n"); for(i=0; i
输入数据(文件):
0 2 100 1 500 4 701 2 151 4 102 0 202 3 153 1 20 3 4 354 3 305 3 3-1 -1 -1输出结果:
0 50 10 -1 70 -1 -1 0 15 -1 10 -1 20 -1 0 15 -1 -1 -1 20 -1 0 35 -1 -1 -1 -1 30 0 -1 -1 -1 -1 3 -1 0start node:1first distance: 2147483647 0 15 2147483647 10 2147483647result distance: 35 0 15 30 10 2147483647 result previous: 2 1 1 2 1 1