Dijkstra算法 求源点到各点之间的最短路

初学者 按照自己的理解写的

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
void Dijkstra(int arc[][5],int arcnum,int vertexnum);
 int min(int *dist,int n);
int main(int argc, char *argv[]) {
int arc[5][5]={{0,10,MAX,30,100},{MAX,0,50,MAX,MAX},{MAX,MAX,0,MAX,10},{MAX,MAX,20,0,60},{MAX,MAX,MAX,MAX,0}};//输入一个图的邻接矩阵// 
int v=0;//求源点到个点之间的最短路,这里假设源点0;也可以是点1,点2 点n 
int vertexnum=5;//定点的个数 
Dijkstra(arc,v,vertexnum);	
	
	return 0;
}
//  Dijkstra算法 求源点到各点之间的最短路  与bfs的思路有些相似 
void Dijkstra(int arc[][5],int v,int vertexnum)
{  int k,num,i,dist[2000];
for(i=0;i<vertexnum;i++){

         dist[i]=arc[v][i];
        }
    for(num=1;num<vertexnum;num++) {//有多少顶点就循环 就循环vertexnum-1次 
      k=min(dist,vertexnum);
      printf("%d %d\n",dist[k],k);//输出v点到k点的最短路 
      for(i=0;i<vertexnum;i++)// 修改数组dist 
         if(dist[i]>dist[k]+arc[k][i])
             dist[i]=dist[k]+arc[k][i];
      dist[k]=0;// 将访问过的顶点标记,在下次循环中不参与比较 
     }}
 //求dist集合中最短的路 
  int min(int *dist,int n){
     int k,m,i;
       k=1001;
    for(i=0;i<n;i++)
     if(dist[i]!=0)
        if(dist[i]<k)
            {k=dist[i];
             m=i;}
             return m;
}

《Dijkstra算法 求源点到各点之间的最短路》

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/tspxxx/article/details/61622593
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞