当前位置:文档之家› 火车路线查询最短路径数据结构C

火车路线查询最短路径数据结构C

cout<<"请输入要删除的站点序号:"; cin>>v; for(int i=0;i<numV;i++) { if(i!=v-1)
{ Edge[v-1][i]=MAXweight; Edge[i][v-1]=MA#34;删除成功!"<<endl; numV=numV-z; } for(int i=0;i<z;i++) { cout<<"请输入要删除路线的站点序号 vi:"; cin>>x; cout<<"请输入要删除路线的站点序号 vj:"; cin>>y; if(Edge[x-1][y-1]!=MAXweight) { Edge[x-1][y-1]=MAXweight; Edge[y-1][x-1]=MAXweight; cout<<"删除成功!"<<endl; numE--; } else
dist[w]=dist[u]+Edge[u][w]; path[w]=u;
} }
for( i=0;i<numV;i++) {
if(i!=v&&dist[i]!=MAXweight) { string c[10]; int j=0; int k=i; cout<<"从"<<b<<"到"<<Vertices[i].city<<"的"; cout<<"最佳路径长度为:"; cout<<dist[i]<<"千米"<<endl; cout<<"大约需要"<<dist[i]/100<<"小时"<<endl; cout<<"路径为:"<<endl; do{
cout<<numV+i+1<<":"; cin>>Vertices[numV+i].city; cout<<"添加成功!"<<endl; } for(i=0;i<x;i++) {
cout<<"输入站点 i 到站点 j 的路径的长度(i,j:站点前的序号):"<<endl; cout<<"站点 i:"; cin>>vi; cout<<"站点 j:"; cin>>vj; cout<<"路径长度(千米):"; cin>>l; Edge[vi-1][vj-1]=l; Edge[vj-1][vi-1]=l; cout<<"添加成功!"<<endl; } numE=x+numE; numV=y+numV; } void Graph::change()/*修改信息*/ { string a; string c; int b=0; char e; char d; int x; int y; int f; cout<<"是否修改站点名字(Y/N)"<<endl; cin>>e; if(e=='y') { cout<<"所有站点的名字:"<<endl; for(int q=0;q<numV;q++) {
Graph(); void input(); 息*/ void add(); 息*/ void change(); 息*/ void del(); 息*/ void show(); 息*/ void select_path1(); 路程查询*/ void select_path2(); 路程查询*/ private: int Edge[MAXVertices][MAXVertices]; int numE,numV; Vertex Vertices[MAXVertices]; };
} }
void Graph::select_path2()/*查询所有最短路程*/ {
int dist[MAXVertices]; int path[MAXweight]; bool s[MAXVertices]; int v; string b; cout<<"所有站点的名字:"<<endl; for(int q=0;q<numV;q++) { cout<<setw(4)<<q+1<<"."<<Vertices[q].city; } cout<<endl; cout<<"输入你所在的站点名字:"; cin>>b; for(int i=0;i<numV;i++)
if(Vertices[i].city==b) v=i;
for( i=0;i<numV;i++) if(Vertices[i].city==c)
v1=i; for( i=0;i<numV;i++) {
dist[i]=Edge[v][i]; s[i]=0; if(i!=v&&dist[i]<MAXweight)
cout<<i+1<<":"; cin>>Vertices[i].city; } for(i=0;i<numE;i++) {
cout<<"输入站点 i 到站点 j 的路径的长度(i,j:站点前的序号):"<<endl; cout<<"站点 i:"; cin>>vi; cout<<"站点 j:"; cin>>vj; cout<<"路径长度(千米):"; cin>>l; Edge[vi-1][vj-1]=l; Edge[vj-1][vi-1]=l; } cout<<"录入完成"<<endl; }
float min=MAXweight; int u=v; for(int j=0;j<numV;j++)
if(!s[j]&&dist[j]<min) {
u=j; min=dist[j]; } s[u]=1; for(int w=0;w<numV;w++)
if(!s[w]&&Edge[u][w]<MAXweight&&dist[u]+Edge[u][w]<dist[w]) {
path[i]=v; else
path[i]=-1; } s[v]=1; dist[v]=0; for(i=0;i<numV;i++) {
float min=MAXweight; int u=v; for(int j=0;j<numV;j++)
if(!s[j]&&dist[j]<min) {
u=j; min=dist[j]; } s[u]=1; for(int w=0;w<numV;w++)
cout<<"不存在该路线!"<<endl; numE=numE-k; }
}
void Graph::show()//显示所有的站点 {
cout<<"所有站点的名字:"<<endl; for(int i=0;i<numV;i++) { cout<<setw(4)<<i+1<<"."<<Vertices[i].city; } cout<<endl; }
cout<<setw(4)<<q+1<<"."<<Vertices[q].city; } cout<<endl;
cout<<"请输入要修改的站点名字:"; cin>>a; for(int i=0;i<numV;i++)
if(Vertices[i].city==a) {
cout<<"请重新输入站点名字:"; cin>>c; Vertices[i].city=c; b++; cout<<"修改成功!"<<endl; } if(b==0) cout<<"不存在该站点!"<<endl; } cout<<"是否修改站点距离(Y/N)"<<endl; cin>>d; if(d=='y') { cout<<"请输入要修改路线的站点序号 vi:"; cin>>x; cout<<"请输入要修改路线的站点序号 vj:"; cin>>y; if(Edge[x-1][y-1]!=MAXweight) { cout<<"请重新输入 vi 到 vj 距离:"<<endl; cin>>f; Edge[x-1][y-1]=f; Edge[y-1][x-1]=f; cout<<"修改成功!"<<endl; } else cout<<"不存在该路线!"<<endl;
相关主题