• Dijkstra算法的C语言程序


    Dijikstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。该算法是由荷兰计算机科学家迪杰斯特拉于1959年提出的。

    程序来源:Dijkstra's Algorithm

    百度百科:Dijkstra算法

    维基百科:Dijkstra's Algorithm

    C语言程序(去除了原文中非标准的C语言代码):

    #include<stdio.h>
    
    #define INFINITY 9999
    #define MAX 10
    
    void dijikstra(int G[MAX][MAX], int n, int startnode);
    
    int main(){
        int G[MAX][MAX], i, j, n, u;
    
        printf("
    Enter the no. of vertices:: ");
        scanf("%d", &n);
        printf("
    Enter the adjacency matrix::
    ");
        for(i=0;i < n;i++)
            for(j=0;j < n;j++)
                scanf("%d", &G[i][j]);
        printf("
    Enter the starting node:: ");
        scanf("%d", &u);
        dijikstra(G,n,u);
    }
    
    void dijikstra(int G[MAX][MAX], int n, int startnode)
    {
        int cost[MAX][MAX], distance[MAX], pred[MAX];
        int visited[MAX], count, mindistance, nextnode, i,j;
        for(i=0;i < n;i++)
            for(j=0;j < n;j++)
                if(G[i][j]==0)
                    cost[i][j]=INFINITY;
                else
                    cost[i][j]=G[i][j];
    
        for(i=0;i< n;i++) {
            distance[i]=cost[startnode][i];
            pred[i]=startnode;
            visited[i]=0;
        }
        distance[startnode]=0;
        visited[startnode]=1;
        count=1;
        while(count < n-1) {
            mindistance=INFINITY;
            for(i=0;i < n;i++)
                if(distance[i] < mindistance&&!visited[i]) {
                    mindistance=distance[i];
                    nextnode=i;
                }
            visited[nextnode]=1;
            for(i=0;i < n;i++)
                if(!visited[i])
                    if(mindistance+cost[nextnode][i] < distance[i]) {
                        distance[i]=mindistance+cost[nextnode][i];
                        pred[i]=nextnode;
                    }
                count++;
        }
    
        for(i=0;i < n;i++)
            if(i!=startnode) {
                printf("
    Distance of %d = %d", i, distance[i]);
                printf("
    Path = %d", i);
                j=i;
                do {
                    j=pred[j];
                    printf(" <-%d", j);
                }
                while(j!=startnode);
            }
        printf("
    ");
    }

    程序运行结果:

    Enter the no. of vertices:: 4
    
    Enter the adjacency matrix::
    0 1 1 1
    1 0 1 0
    1 1 0 1
    1 0 1 0
    
    Enter the starting node:: 1
    
    Distance of 0 = 1
    Path = 0 <-1
    Distance of 2 = 1
    Path = 2 <-1
    Distance of 3 = 2
    Path = 3 <-0 <-1


  • 相关阅读:
    nginx申请并配置免费https
    linux安装git
    linux安装openssl
    nginx配置支持http2
    linux服务器升级nginx
    linux 增加虚拟内存swap(使用文件)
    使用shell安装lnmp
    mysql 数据库主从同步
    Android四大组件之Service
    Android四大组件之Activity
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564183.html
Copyright © 2020-2023  润新知