<菜鸟学算法-Dijkstra求最短路径>

来源:互联网 发布:知鱼怎么烧 编辑:程序博客网 时间:2024/05/16 08:07
<img src="http://img.my.csdn.net/uploads/201405/22/1400761299_7703.jpg" alt="" />
#include<stdio.h>#define INFINITE 10000int Graph[6][6]={{0,2,4,0,0,0},  /*建立一个有向图,0表示不通,非零为权值*/{0,0,5,6,9,0},{0,0,0,0,7,0},{0,0,0,0,2,3},{0,0,0,0,0,4},{0,0,0,0,0,0}};typedef struct vertex{int id;int min_path;}Vertex;struct ADJ{Vertex seq[10];int len;}S,U;void InitSU(){int i;S.seq[0].id=0;S.seq[0].min_path=0;S.len=1;U.len=0;for(i=0;i<5;i++){U.seq[i].id=i+1;U.seq[i].min_path=INFINITE;U.len++;}printf("U.len=%d\n",U.len);}void MoveMintoS(){int i,min;min=0;for(i=1;i<U.len;i++){if(U.seq[i].min_path<U.seq[min].min_path)min=i;}S.seq[S.len].id=U.seq[min].id;S.seq[S.len].min_path=U.seq[min].min_path;S.len++;for(i=min;i<U.len-1;i++)U.seq[i]=U.seq[i+1];U.len--;}void Dijkstra(){int i,j,k,min;while(S.len!=6){i=S.seq[S.len-1].id;for(k=0;k<U.len;k++){j=U.seq[k].id;if(Graph[i][j]==0) continue;min=Graph[i][j]+S.seq[S.len-1].min_path;if(U.seq[k].min_path>min)    U.seq[k].min_path=min;    }MoveMintoS();}}int main(int argc,char *argv[]){inti;InitSU();Dijkstra();for(i=1;i<S.len;i++)printf("The min_path form %d--->S(0) is:%d\n",S.seq[i].id,S.seq[i].min_path);return 0;}

0 0
原创粉丝点击