当前位置 : 主页 > 手机开发 > harmonyos >

dij 最短路径模板

来源:互联网 收集:自由互联 发布时间:2023-08-25
#includestdio.h int Path[550]; int Dist[550]; int Mark[550]; int Map[550][550]; void Dij(int x,int n) { int i,j,k; for(i=1;i=n;i++) { Dist[i]=Map[x][i]; Mark[i]=1; Path[i]=x; } Dist[x]=0; Mark[x]=0; Path[x]=-1; int Min; for(i=2;i=n;i++) { M
#include<stdio.h> 

 int Path[550]; 

 int Dist[550]; 

 int Mark[550]; 

 int Map[550][550]; 

 void Dij(int x,int n) 

 { 

     int i,j,k; 

    for(i=1;i<=n;i++) 

     { 

         Dist[i]=Map[x][i]; 

         Mark[i]=1; 

         Path[i]=x; 

     } 

     Dist[x]=0; 

     Mark[x]=0; 

     Path[x]=-1; 

     int Min; 

     for(i=2;i<=n;i++) 

     { 

         Min=9999; 

         for(j=2;j<=n;j++) 

         { 

             if(Mark[j]&&Dist[j]<Min) 

             { 

                 k=j; 

                 Min=Dist[j]; 

             } 

         } 

         Mark[k]=0; 

         for(j=2;j<=n;j++) 

         { 

             if(Mark[j]) 

             if(Dist[k]+Map[k][j]<Dist[j]) 

             { 

                 Dist[j]=Dist[k]+Map[k][j]; 

                 Path[j]=k; 

             } 

         } 

     } 

 } 

 void Print(int n) 

 { 

     printf("%d\n",n); 

     while(Path[n]>0) 

     { 

         printf("%d\n",Path[n]); 

         n=Path[n]; 

     } 

 } 

 int main() 

 { 

     int n,m; 

     int x,y,z; 

     while(scanf("%d%d",&n,&m)!=EOF) 

     { 

         for(x=1;x<=n;x++) 

         { 

             for(y=x+1;y<=n;y++) 

                 Map[x][y]=Map[y][x]=9999; 

             Map[x][x]=0; 

         } 

         while(m--) 

         { 

             scanf("%d%d%d",&x,&y,&z); 

             Map[x][y]=Map[y][x]=z; 

         } 

         Dij(1,n); 

         Print(n); 

         printf("%d\n",Dist[n]); 

     } 

     return 0; 

 }
【转自:外国服务器 http://www.558idc.com/shsgf.html转载请说明出处】
上一篇:线索二叉树
下一篇:没有了
网友评论