急急急,那位高手能给出求最短路径的完整源程序(高分)
图中带有权;谢谢

解决方案 »

  1.   

    vc最短经由的计算在列车运输中,经常要求两个车站之间的最短路径,各个基站之间的最短路径。
     
    附:狄克斯特拉算法的源代码
    #include "stdafx.h"
    #include "iostream.h"
    //#include <windows.h>
    const int MaxVertexNum=100;
    const int MaxEdgeNum=50;
    const int MaxValue=10000;
    typedef int VertexType;
    typedef VertexType vexlist[MaxVertexNum];
    typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
    struct edgenode{
    int adjvex;
    //int weight;
    edgenode * next;
    };typedef edgenode *adjlist[MaxVertexNum];
    typedef VertexType xhjlist[MaxVertexNum];#define N 1000
    #define MAX_INT 10000//--------------c++语言的Dijkstra最短路径算法
    void Dijkstra(adjmatrix GA,int dist[],adjlist path,int i,int n)
    {
    int j,k,w,m;
    int *s=new int[n];
    for (j=0;j<n;j++){
    if(j==i)
    s[j]=1;
    else
    s[j]=0;
    dist[j]=GA[i][j];
    printf("%d ",GA[i][j]);
    if(dist[j]<MaxValue && j!=i){
    edgenode *p1=new edgenode;
    edgenode *p2=new edgenode;
    p1->adjvex=i;
    p2->adjvex=j;
    p2->next=NULL;
    p1->next=p2;
    path[j]=p1;
    }
    else
    path[j]=NULL;
    }
    for (k=1;k<=n-2;k++)
    {
    w=MaxValue;m=i;
    for(j=0;j<n;j++)
    if(s[j]==0 && dist[j]<w){
    w=dist[j];
    m=j;
    }
    if(m!=i)
    s[m]=1;
    else
    break;
    for (j=0;j<n;j++)
    if(s[j]==0 && dist[m]+GA[m][j]<dist[j]){
    dist[j]=dist[m]+GA[m][j];
    //PATH(path,m,j);
    }
    }
    for (j=0;j<6;j++)
    printf("%d \n",dist[j]);
    }