Dijkstra
代码
const int INF = 100;
int Min(int dist[], int vertexNum){
int i,k;
for(i = 0,k = 0;i<vertexNum; i++)
if((dist[i]!=0)&&(dist[i]<dist[k]))
k=i;
return k;
}
void Dijkstra(int v){
int num,dist[MaxSize];
for(int i=0;i<vertexNum;i++){
dist[i] = edge[v][i];
if(dist[i]!=INF)
path[i] = vertex[v]+vertex[i];
else
path[i] = "";
}
for(num = 1;num<vertexNum;num++){
k = Min(dist,vertexNum);
cout<<path[k]<<dist[k];
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
代码
const int INF = 100;
void Floyd(){
int dist[MaxSize][MaxSize];
string path[MaxSize][MaxSize];
for(int i=0; i<vertexNum; i++)
for(int j=0; j<vertexNum; j++){
dist[i][j] = edge[i][j];
if(dist[i][j] !=INF)
path[i][j] = vertex[i] + vertex[j];
else
path[i][j] = "";
}
for(int k=0; k<vertexNum; k++)
for(int i=0; i<vertexNum; i++)
for(int j=0; j<vertexNum; j++)
if(dist[i][k]+dist[k][j]<dist[i][j]){
dist[i][j]=dist[i][k]+dist[k][j];
psth[i][j]=path[i][k]+path[k][j];
}
}