Dijkstra 算法求最短路径

来源:互联网 发布:mysql 最小值 编辑:程序博客网 时间:2024/05/01 12:56
#include<stdio.h>#include<string.h>#include<math.h>#define INF 1e9#define MAX 100000#define MAXN 1002int c[MAXN][MAXN],s[MAXN],dist[MAXN];void dijkstra(int n){int j,p,k,u,i;for(j=1;j<=n;j++){if(c[1][j]>0&&c[1][j]<MAX)dist[j]=c[1][j];elsedist[j]=INF;}p=n;s[1]=1;while(p--){int min=INF;for(k=1;k<=n;k++)if((min>dist[k])&&(s[k]==0))min=dist[k];for(k=1;k<=n;k++)if(min==dist[k]&&(s[k]==0)){s[k]=1;u=k;break;}for(i=1;i<=n;i++)if(dist[u]+c[u][i]<dist[i])dist[i]=dist[u]+c[u][i];}}int main(){int i,n,j;while(~scanf("%d",&n))//n个结点{memset(c,0,sizeof(c));for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&c[i][j]);//n个结点的邻接矩阵dijkstra(n);dist[1]=0;for(i=1;i<=n;i++)//到1的最短路径printf("%d ",dist[i]);printf("\n");}return 0;}
原创粉丝点击