Dijkstra算法的C语言程序

Dijkstra算法用来寻找图的结点间最短路径,通常是指定一个起始结点后,寻找从该结点出发,到达各个结点的最短路径。该算法是有关最短路径问题的一个算法。由Dijkstra于1959年提出。

百度百科:Dijkstra算法。

维基百科Dijkstra's Algorithm

参考链接:Dijkstra算法的C语言程序

程序说明:图存储在二维数组中,即邻接矩阵中。使用s集合和vs集合辅助Dijkstra算法的过程,开始时将指定的开始结点放入s集合中,其他剩余的结点放入vs集合中,从s集合到vs集合的边中找出一个代价最小的边,然后将相关的结点从vs集合取出放入s集合,指定所有结点都在s集合为止。

中间结果和最后结果放在数组dist[]中。

C语言程序:

/* 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 6

int 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 10
0 1 50
0 4 70
1 2 15
1 4 10
2 0 20
2 3 15
3 1 20 
3 4 35
4 3 30
5 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   0
start node:1
first distance:
  2147483647           0          15  2147483647          10  2147483647
result distance:
  35    0   15   30   10 2147483647 
result previous:
   2    1    1    2    1    1 


你可能感兴趣的:(图论算法)