📜  Dijkstra 在 C 中的算法代码 - 任何代码示例

📅  最后修改于: 2022-03-11 14:56:49.996000             🧑  作者: Mango

代码示例1
#include#include#define INFINITY 9999#define MAX 10 void dijikstra(int G[MAX][MAX], int n, int startnode); void main(){    int G[MAX][MAX], i, j, n, u;    clrscr();    printf("\nEnter the no. of vertices:: ");    scanf("%d", &n);    printf("\nEnter the adjacency matrix::\n");    for(i=0;i < n;i++)        for(j=0;j < n;j++)            scanf("%d", &G[i][j]);    printf("\nEnter the starting node:: ");    scanf("%d", &u);    dijikstra(G,n,u);    getch();} 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("\nDistance of %d = %d", i, distance[i]);            printf("\nPath = %d", i);            j=i;            do            {                j=pred[j];                printf(" <-%d", j);            }            while(j!=startnode);        }}