zoukankan      html  css  js  c++  java
  • HDU2807 Floyd

    题意:从一点到另外一点的最短距离

    因为点的个数较小 用floyd

    View Code
      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<stdlib.h>
      4 #include<algorithm>
      5 #include<queue>
      6 using namespace std;
      7 const int maxn = 81;
      8 struct node{
      9     int mat[ maxn ][ maxn ];
     10 }a[ maxn ];
     11 struct node2{
     12     int mat[ maxn ][ maxn ];
     13 }aa[ maxn ][ maxn ];
     14 int mat[ maxn ][ maxn ];
     15 int n,m;
     16 const int inf = 9999999;
     17 
     18 void judge( int num1,int num2 ){
     19     for( int i=0;i<m;i++ ){
     20         for( int j=0;j<m;j++ ){
     21             int sum=0;
     22             for( int k=0;k<m;k++ ){
     23                 sum+=(a[num1].mat[i][k]*a[num2].mat[k][j]);
     24             }
     25             aa[num1][num2].mat[i][j]=sum;
     26         }
     27     }
     28     return ;
     29 }
     30 
     31 int comp( int x,int y,int temp ){
     32     for( int i=0;i<m;i++ ){
     33         for( int j=0;j<m;j++ ){
     34             if( aa[x][y].mat[i][j]!=a[temp].mat[i][j] )
     35             {
     36                 return -1;
     37             }
     38         }
     39     }
     40     return 1;
     41 }
     42 
     43 
     44 void get_map(){
     45     for( int i=1;i<=n;i++ )
     46         for( int j=1;j<=n;j++ )
     47             mat[i][j]=inf;
     48     for( int i=1;i<=n;i++ ){
     49         for( int j=1;j<=n;j++ ){
     50             if( i!=j )
     51                 judge( i,j );
     52         }
     53     }
     54     for( int i=1;i<=n;i++ ){
     55         for( int j=1;j<=n;j++ ){
     56             for( int k=1;k<=n;k++ ){
     57                 if( i!=j&&i!=k&&j!=k&&comp( i,j,k )==1 )
     58                     mat[i][k]=1;
     59             }
     60         }
     61     }
     62 }
     63 
     64      /*
     65     int bfs( int x,int y ){
     66         int dis[ maxn ];
     67         queue<int>q;
     68         while( !q.empty() )
     69             q.pop();
     70         for( int i=1;i<=n;i++ )
     71             dis[i]=inf;
     72         dis[x]=0;
     73         q.push(x);
     74         while( !q.empty() ){
     75             int now=q.front();
     76             q.pop();
     77             for( int i=1;i<=n;i++ ){
     78                 if( i!=now&&mat[now][i]==1&&dis[i]>dis[now]+1 ){
     79                     dis[i]=dis[ now ]+1;
     80                     q.push( i );
     81                 }
     82             }
     83         }
     84         if( dis[y]>=inf )
     85             return -1;
     86         else
     87             return dis[y];
     88     }*/
     89 void floyd(){
     90     for( int i=1;i<=n;i++ ){
     91         for( int j=1;j<=n;j++ ){
     92             for( int k=1;k<=n;k++ ){
     93                 if( mat[i][k]!=0&&mat[k][j]!=0&&mat[i][j]>mat[i][k]+mat[k][j] ){
     94                     mat[i][j]=mat[i][k]+mat[k][j];
     95                 }
     96             }
     97         }
     98     }
     99 }
    100 
    101 int main(){
    102     //int n,m;
    103     while( scanf("%d%d",&n,&m)==2,n+m ){
    104         for( int k=1;k<=n;k++ ){
    105             for( int i=0;i<m;i++ ){
    106                 for( int j=0;j<m;j++ ){
    107                     scanf("%d",&a[k].mat[i][j]);
    108                 }
    109             }
    110         }
    111         get_map();
    112         floyd();
    113         int ca;
    114         scanf("%d",&ca);
    115         while( ca-- ){
    116             int x,y;
    117             scanf("%d%d",&x,&y);
    118             if( mat[x][y]!=inf )
    119                 printf("%d\n",mat[x][y]);
    120             else
    121                 printf("Sorry\n");
    122             /*
    123             int ans=bfs(x,y);
    124             if( ans==-1 )
    125                 printf("Sorry\n");
    126             else
    127                 printf("%d\n",ans);
    128             */
    129         }
    130     }
    131     return 0;
    132 }
    keep moving...
  • 相关阅读:
    O2O、B2B、C2C(通俗讲解)
    前端 $.parseJson()
    django反向解析传参
    从url(地址栏)获取参数:Jquery中getUrlParam()方法的使用
    Django:前后端分离后联调给前端传数据
    xpath 中 [<Element a at 3985984dj343>]
    sumafan:python爬虫多线程爬取数据小练习(附答案)
    window安装mysql(详细步骤)
    sqlserver从xlsx读取数据
    第一个kotlin程序
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2920310.html
Copyright © 2011-2022 走看看