#include<stdio.h>
#include<string.h>


typedef struct ArcCell
{    
    int adj;
}ArcCell;

typedef struct VertexType
{
    int number;
    char *city;
}VertexType;

typedef struct
{
    VertexType vex[25];
    AreCell arcs[25][25];
    int vexnum,arcnum;
}MGraph;

MGraph G;
int P[25][25];
long int D[25];

void CreateUDN(v,a)
 int v,a;
{
    int i,j;
    G.vexnum=v;
    G.arcnum=a;
    for(i=0;i<G.vexnum;++i) G.vex[i].number=i;
    G.vex[0].city="乌鲁木齐";
    G.vex[1].city="西宁";
    G.vex[2].city="兰州";
    G.vex[3].city="呼和浩特";
    G.vex[4].city="北京";
    G.vex[5].city="天津";
    G.vex[6].city="沈阳";
    G.vex[7].city="长春";
    G.vex[8].city="哈尔滨";
    G.vex[9].city="大连";
    G.vex[10].city="西安";
    G.vex[11].city="郑州";
    G.vex[12].city="徐州";
    G.vex[13].city="成都";
    G.vex[14].city="武汉";
    G.vex[15].city="上海";
    G.vex[16].city="昆明";
    G.vex[17].city="贵州";
    G.vex[18].city="株洲";
    G.vex[19].city="南昌";
    G.vex[20].city="福州";
    G.vex[21].city="柳州";
    G.vex[22].city="南宁";
    G.vex[23].city="广州";
    G.vex[24].city="深圳";
    for(i=0;i<G.vexnum;++i)
        for(j;j<G.vexnum;++j)
            G.arcs[i][j].adj=20000;
    G.arcs[0][2].adj=G.arcs[2][0].adj=1892;
    G.arcs[1][2].adj=G.arcs[2][1].adj=216;
    G.arcs[2][3].adj=G.arcs[3][2].adj=1145;
    G.arcs[2][10].adj=G.arcs[10][2].adj=676;
    G.arcs[3][4].adj=G.arcs[4][3].adj=668;
    G.arcs[4][5].adj=G.arcs[5][4].adj=137;
    G.arcs[5][6].adj=G.arcs[6][5].adj=704;
    G.arcs[6][7].adj=G.arcs[7][6].adj=305;
    G.arcs[7][8].adj=G.arcs[8][7].adj=242;
    G.arcs[6][9].adj=G.arcs[9][6].adj=397;
    G.arcs[4][11].adj=G.arcs[11][4].adj=695;
    G.arcs[5][12].adj=G.arcs[12][5].adj=674;
    G.arcs[10][13].adj=G.arcs[13][10].adj=842;
    G.arcs[11][14].adj=G.arcs[14][11].adj=534;
    G.arcs[12][15].adj=G.arcs[15][12].adj=651;
    G.arcs[13][16].adj=G.arcs[16][13].adj=1100;
    G.arcs[13][17].adj=G.arcs[17][13].adj=967;
    G.arcs[14][18].adj=G.arcs[18][14].adj=409;
    G.arcs[17][18].adj=G.arcs[18][17].adj=902;
    G.arcs[15][19].adj=G.arcs[19][15].adj=825;
    G.arcs[18][19].adj=G.arcs[19][18].adj=367;
    G.arcs[19][20].adj=G.arcs[20][19].adj=622;
    G.arcs[17][21].adj=G.arcs[21][17].adj=607;
    G.arcs[18][21].adj=G.arcs[21][18].adj=672;
    G.arcs[21][22].adj=G.arcs[22][21].adj=255;
    G.arcs[18][23].adj=G.arcs[23][18].adj=675;
    G.arcs[23][24].adj=G.arcs[24][23].adj=140;
    G.arcs[16][17].adj=G.arcs[17][16].adj=639;
    G.arcs[10][11].adj=G.arcs[11][10].adj=511;
    G.arcs[11][12].adj=G.arcs[12][11].adj=349;
}
void narrate()
{
    int i,k=0;
    cout<<"---------------欢迎使用最优交通路径程序----------------"<<endl;
    cout<<"城市列表如下:"<<endl;
    for(i=0;i<25;i++)
    {
        cout<<i<<G.vex[i].city;
        k=k+1;
        if(k%4==0)
            cout<<endl;
    }
}
void ShortestPath(num)
int num;
{
    int v,w,i,t;
    int final[25];
    int min;
    for(v=0;v<25;++v)
    {
        final[v]=0;D[v]=G.arcs[num][v].adj;
        for(w=0;w<25;++w) P[v][w]=0;
        if(D[v]<20000) 
        {
            P[v][num]=1;P[v][v]=1;
        }
    }
    D[num]=0; final[num]=1;
    for(i=0;i<25;i++)
    {
        min=20000;
        for(w=0;w<25;w++)
            if(!finel[w])
                if(D[w]<min)
                {
                    v=w; min=D[w];
                }
        final[v]=1;
        for(w=0;w<25;++w)
            if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))
            {
                D[w]=min+G.arcs[v][w].adj;
                for(t=0;t<25;t++)
                    P[w][t]=P[v][t];
                P[w][w]=1;
            }
                
    }
}
void output(city1,city2)
int city1,city2;
{
    int a,b,c,d,q=0;
    a=city2;
    if(a!=city1)
    {
        cout<<"从"<<G.vex[city1].city<<"到"<<G.vex[city2].city2<<"的最短路径是";
        cout<<"最短距离为"<<D[a];
        cout<<G.vex[city1].city;
        d=city1;
        for(c=0;c<25;++c)
        {
gate:;
     P[a][city1]=0;
     for(b=0;b<25;b++)
     {
         if(G.arcs[d][b].adj<20000 && P[a][b])
         {
             cout<<"--->"<<G.vex[b].city;
             q=q+1;
             P[a][b]=0;
             d=b;
             if(q%8==0)
                 cout<<endl;
             goto gate;
         }
     }
        }
    }
}
void main()
{
    int v0,v1;
    CreateUDN(25,30);
    narrate();
    cout<<"请选择起点城市(0-----24)"<<endl;
    cin>>v0;
cout<<请选择终点城市(0-----24)<<endl;
cin>>v1;
ShortestPath(v0);
output(v0,v1);
cout<<endl;
cout<<"请按任意键退出";
getch();

}
各位大侠帮我找找错误!小弟不甚感激!改完后发我邮箱409690594@qq.com