迪克斯特拉演算法
To 1 1 1
To 2 4 2
……
……
#include <iostream>
#include <stdio.h>
#define inf 37000
using namespace std;
void dispath(int g[][6],int *dist ,int *path, int *s,int v)
{
int i,j,k;
for(i=0;i<6;i++)
{
if(s[i]==1&&i!=v)
{printf("To %d %d",i,dist[i]);
j=1;
k=i;
while(path[k]!=0)
{
j++;
k=path[k];
}
printf(" %d\n",j);
}
}
}
void dijkstra(int g[][6],int v)
{
int dist[6],path[6];//距離,路徑
int s[6];
int min1,i,j,u;
for(i=0;i<6;i++)//初始化距離,路徑
{
dist[i]=g[v][i];
s[i]=0;
if(dist[i]<inf)
path[i]=v;
else path[i]=-1;
}
s[v]=1;
path[v]=0;
for(i=0;i<6;i++)
{
min1=inf;
for(j=0;j<6;j++)//找出離s陣列最小的那個數
{
if(min1>dist[j]&&s[j]==0)
{
u=j;
min1=dist[j];
}
}
s[u]=1; //把最小的數加入s陣列
for(j=0;j<6;j++)//查詢通過新加入的點是否有離s陣列更近的路徑
{
if(s[j]==0)
if(dist[j]>(dist[u]+g[u][j])&&g[u][j]<inf)
{
dist[j]=dist[u]+g[u][j];
path[j]=u;
}
}
}
dispath(g,dist,path,s,v);//輸出
}
int main()
{
int a[6][6]={0,1,5,2,37000,37000,37000,0,3,37000,7,37000,37000,37000,0,37000,37000,6,37000,37000,37000,0,37000,8,37000,37000,37000,37000,0,5,37000,37000,37000,37000,37000,0};
dijkstra(a,0);
return 0;
}