【P1359 租用游艇】floyed最短路 模板题

https://www.luogu.org/problemnew/show/P1359

试题分析:

 

 

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int n,m;
int a[210][210];
int main()
{
    memset(a,0x7f,sizeof(a));

    cin>>n;  //输入游艇数量 
    for(int i=1;i<n;i++)
    {     //读入数据,构建半矩形结构         
        for(int j=i+1;j<=n;j++) cin>>a[i][j]; 
    }
  
  
/* 输出floyed之前的矩阵存储结构 
      for(int i=1;i<=n;i++)
     {
       {for(int j=1;j<=n;j++)
       cout<<a[i][j]<<"  ";
      } 
      cout<<"\n";
    
    }
    
*/  
  
    for(int k=1;k<=n;k++)                 //Floyd跑一遍  
       for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)       // a[i][j]=min(a[i][j],a[i][k]+a[k][j]) ; 这句可替代下面条件 
       if((k!=i)&&(k!=j)&&(j!=k)&&(a[i][j]>a[i][k]+a[k][j]))   a[i][j]=a[i][k]+a[k][j];
          //条件是避免自己到自己 
    cout<<a[1][n]<<endl;
    
  
 
  // floyed之后的矩阵存储结构 
      for(int i=1;i<=n;i++)
     {
       {for(int j=1;j<=n;j++)
       cout<<a[i][j]<<"  ";
      } 
      cout<<"\n";
    
    }

      
    
    return 0;
}

红框中为floyed后 存储结构,各点间最短距离。

 

posted on 2018-12-18 11:47  lcdxjsj  阅读(115)  评论(0)    收藏  举报

导航