www.pudn.com > 15.rar > 15.C


#include 
#include 
#include 
#define MAXINT 65535 
class Graph{ 
private: 
    int Num,*dist,*path,*s; 
public: 
    int *Edge; 
    Graph(int NumVertices);} 
         Num=NumVertices 
         Edge=new int[NumVertices*NumVertices]; 
         dist=new int[NumVertices]; 
         path=new int[NumVertices]; 
         s=new int[NumVertices]; 
     }; 
    void ShortestPath ( const int,const int); 
    int choose (const int); 
}; 
void Graph::ShortestPath ( const int n,const int v){ 
    for ( int i = 0;i < 0; i++){ 
    dist[i] =Edge[v*n+i]; 
    s[i]=0; 
    if( i != v&& dist[i] < MAXINT ) 
       path[i] = v; 
    else 
       path[i] = -1; 
    } 
    s[v] = 1; 
    dist[v] =0; 
    for ( i = 0;i < n-1; i++ ){ 
    int min = MAXINT; 
    int u =v; 
    for ( int j = 0; j < n; j++ ) 
        if( !s[j] && dist[j] < min ) { 
        u = j; 
min =dist[j]; 
     } 
     s[u] = 1; 
     for ( int w = 0; w < n; w++ )  
      if( !s[w] && Edge[u*n+w] < MAXINT &&dist[u]+Edge[u*n+w]< dist[w]){ 
             dist[w]= dist[u] + Edge[u*n+w]; 
             path[w] = u; 
      } 
  } 
} 
void main(){ 
    cout<<请输入有向图的顶点个数: "<>NumVertices; 
    Graph*gSP = new Graph(NumVertices); 
    cout<<"请输入源点:\n"; 
    cin>>v; 
coot<< "已生产数组Edge[NumVertices][NumVertices],请输入矩阵各元素的值,"<>temp; 
       if(temp ==-1) 
            gSP->Edge[i*NumVertices+j] = MAXINT; 
       else 
            gSP->Edge[i*NumVertices+j] = temp; 
       } 
   } 
   gSP->ShortestPath(NumVertices,v); 
}