这里是12.4随笔。
代码留档:#include
using namespace std;
typedef int VexType;
define MVNum 100
define MaxInt 32767
int S[MVNum],Path[MVNum],D[MVNum];
typedef struct{
VexType vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int LocateVex(AMGraph G,VexType v){
for(int i=0;i<G.vexnum;++i)
if(G.vexs[i]==v)
return i;
return -1;
}
void CreatAMGraph(AMGraph &G,int &err){
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;++i)cin>>G.vexs[i];
for(int i=0;i<G.vexnum;++i){
for(int j=0;j<G.vexnum;++j){G.arcs[i][j]=MaxInt;}
}
for(int k=0;k<G.arcnum;++k){VexType v1,v2;int w;cin>>v1>>v2>>w;int i=LocateVex(G,v1),j=LocateVex(G,v2);if(i==-1||j==-1){err=1;}else {G.arcs[i][j]=w;}
}
}
void ShortestPath_DIJ(AMGraph G,int vo){
for(int v=0;v<G.vexnum;++v){
S[v]=0;
D[v]=G.arcs[vo][v];
if(D[v]<MaxInt)Path[v]=vo;
else{Path[v]=-1;}
}
S[vo]=1;
D[vo]=0;
/* for(int i=0;i<G.vexnum;++i){
if(G.arcs[vo][i]!=MaxInt){
D[i]=G.arcs[vo][i];
Path[i]=vo;
}
}*/
for(int k=0;k<G.vexnum-1;++k){
int wmin=MaxInt,vmin;
for(int w=0;w<G.vexnum;++w){
if(!S[w]&&D[w]<wmin){
vmin=w;
wmin=D[w];
}
}
S[vmin]=1;
for(int i=0;i<G.vexnum;++i){
if(!S[i]&&(D[vmin]+G.arcs[vmin][i]<D[i])){
D[i]=D[vmin]+G.arcs[vmin][i];
Path[i]=vmin;
}
}
}
}
int main(){
AMGraph G;
int err=0;
VexType vo,ve;
CreatAMGraph(G,err);
cin>>vo>>ve;
int i=LocateVex(G,vo),j=LocateVex(G,ve);
if(i!=-1&&j!=-1){
ShortestPath_DIJ(G,i);
int adj[MVNum],k=1;
adj[0]=j;
while(Path[j]!=i){
adj[k]=Path[j];
j=Path[j];
++k;
}
adj[k]=i;
for(int n=k;n>=0;--n){
if(n!=0){cout<<G.vexs[adj[n]]<<"-->";}
else {cout<<G.vexs[adj[n]];}
}
}
return 0;
}