Dijkstra算法函數 (c++)
#i nclude "stdio.h"#define BIG 9999 //無窮大
//Dijkstra算法函數,求給定頂點到其余各點的最短路徑
//參數:鄰接矩陣、頂點數、出發點的下標、結果數組
void Dijkstra(int Cost[][6],int n,int v0,int Distance[])
{
int s[6];
int mindis,dis;
int i,j,u;
//初始化
for(i=0;i
s[i]=0;
}
s[v0]=1; /*標記v0*/
//在當前還未找到最短路徑的頂點中,
//尋找具有最短距離的頂點
for(i=1;i
for(j=0;j
u=j;
} // if語句體結束,j循環結束
for(j=0;j
//求出由最近的頂點直達各頂點的距離
dis=Distance[u]+Cost[u][j];
//如果新的路徑更短,就替換掉原路徑
Distance[j]=(Distance[j]
Distance[j]:dis;
} // if語句體結束,,j循環結束
s[u]=1; /* 標記最短路徑已經求得*/
} // i循環結束
}
//主函數
void main()
{
//給出有向網的頂點數組
char *Vertex[6]={"V1","V2","V3","V4","V5","V6"};
//給出有向網的鄰接矩陣
int Cost[6][6]={{0,BIG,5,30,BIG,BIG},
{2,0,BIG,BIG,8,BIG},
{BIG,15,0,BIG,BIG,7},
{BIG,BIG,BIG,0,BIG,BIG},
{BIG,BIG,BIG,4,0,BIG},
{BIG,BIG,BIG,10,18,0},
};
int Distance[6]; //存放求得的最短路徑
int i;
//調用Dijkstra算法函數,求頂點V1到其余各點的最短路徑
//參數:鄰接矩陣、頂點數、出發點的下標、結果數組
Dijkstra(Cost,6,0,Distance);
for(i=0;i<6;i++)
printf("%s---->%s %d\n",
Vertex[0],Vertex[i],Distance[i]);
}
posted on 2006-09-02 15:04 zdygis 閱讀(1465) 評論(0) 編輯 收藏 所屬分類: ArcGis