Dijkstra算法,Floyd算法

Dijkstra算法

void Dijkstra(int v)
{
    
    
   int i,k,num,dist[MaxSize];
   string path[MaxSize];
   for(i=0;i<vertexNum;i++)
   {
    
    
      dist[i]=edge[v][i];
      if(dist[i]!=100)
        path[i]=vertex[v]+vertex[i];
      else
        path[i]="";
    }
    for(num=1;num<vertexNum;num++)
    {
    
    
       k=Min(dist,vertexNum);
       cout<<path[k]<<dist[k];
       for(i=0;i<vertexNum;i++)
         if(dist[i]>dist[k]+edge[k][i])
         {
    
    
            dist[i]=dist[k]+edge[k][i];
            path[i]=path[k]+vertex[i];
         }
       dist[k]=0;
     }
}      

Floyd算法

void Floyd()
{
    
    
   int i,j,k,dist[MaxSize][MaxSize];
   string path[MaxSize][MaxSize];
   for(i=0;i<vertexNum;i++)
     for(j=0;j<vertexNum;j++)
     {
    
    
         dist[i][j]=edge[i][j];
         if(dist[i][j]!=100)
            path[i][j]=vertex[i]+vertex[j];
         else
            path[i][j]="";
      }
    for(k=0;k<vertexNum;k++)
      for(i=0;i<vertexNum;i++)
        for(j=0;j<vertexNum;j++)
          if(dist[i][k]+dist[k][j]<dist[i][j])
          {
    
     
             dist[i][j]=dist[i][k]+dist[k][j];
             path[i][j]=path[i][k]+path[k][j];
          }
}     

猜你喜欢

转载自blog.csdn.net/qq_51344334/article/details/119981143