Dijkstra算法
void Dijkstra(int v)
{
int i,k,num,dist[MaxSize];
string path[MaxSize];
for(i=0;i<vertexNum;i++)
{
dist[i]=edge[v][i];
if(dist[i]!=100)
path[i]=vertex[v]+vertex[i];
else
path[i]="";
}
for(num=1;num<vertexNum;num++)
{
k=Min(dist,vertexNum);
cout<<path[k]<<dist[k];
for(i=0;i<vertexNum;i++)
if(dist[i]>dist[k]+edge[k][i])
{
dist[i]=dist[k]+edge[k][i];
path[i]=path[k]+vertex[i];
}
dist[k]=0;
}
}
Floyd算法
void Floyd()
{
int i,j,k,dist[MaxSize][MaxSize];
string path[MaxSize][MaxSize];
for(i=0;i<vertexNum;i++)
for(j=0;j<vertexNum;j++)
{
dist[i][j]=edge[i][j];
if(dist[i][j]!=100)
path[i][j]=vertex[i]+vertex[j];
else
path[i][j]="";
}
for(k=0;k<vertexNum;k++)
for(i=0;i<vertexNum;i++)
for(j=0;j<vertexNum;j++)
if(dist[i][k]+dist[k][j]<dist[i][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=path[i][k]+path[k][j];
}
}