zoukankan      html  css  js  c++  java
  • hdu 2807 The Shortest Path

    http://acm.hdu.edu.cn/showproblem.php?pid=2807

     第一次做矩阵乘法,没有优化超时,看了别人的优化的矩阵乘法,就过了。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define maxn 100
     6 using namespace std;
     7 const int inf=1<<28;
     8 
     9 int n,m,t1,x,y;
    10 int g[maxn][maxn];
    11 int d[maxn][maxn];
    12 int aa[maxn][maxn][maxn];
    13 
    14 void deal(int a,int b)
    15 {
    16     for(int i=1; i<=m; i++)
    17     {
    18         d[0][i]=0;
    19         for(int j=1; j<=m; j++)
    20         {
    21             d[0][i]+=(aa[a][i][j]*d[b][j]);
    22         }
    23     }
    24     for(int i=1; i<=n; i++)
    25     {
    26         if(i==a||i==b) continue;
    27         bool flag=false;
    28         for(int k=1; k<=m; k++)
    29         {
    30             if(d[0][k]!=d[i][k])
    31             {
    32                 flag=true;
    33                 break;
    34             }
    35         }
    36         if(!flag) g[a][i]=1;
    37     }
    38 }
    39 
    40 
    41 int main()
    42 {
    43     while(cin>>n>>m)
    44     {
    45         if(n==0&&m==0) break;
    46         for(int i=1; i<=n; i++)
    47         {
    48             for(int j=1; j<=m; j++)
    49             {
    50                 d[i][j]=0;
    51                 for(int k=1; k<=m; k++)
    52                 {
    53                     scanf("%d",&aa[i][j][k]);
    54                     d[i][j]+=(aa[i][j][k]*k);
    55                 }
    56             }
    57         }
    58         for(int i=1; i<=n; i++)
    59         {
    60             for(int j=i+1; j<=n; j++)
    61             {
    62                 g[i][j]=g[j][i]=inf;
    63             }
    64         }
    65         for(int i=1; i<=n; i++)
    66         {
    67             for(int j=1; j<=n; j++)
    68             {
    69                 if(i==j) continue;
    70                 deal(i,j);
    71             }
    72         }
    73         for(int k=1; k<=n; k++)
    74         {
    75             for(int i=1; i<=n; i++)
    76             {
    77                 for(int j=1; j<=n; j++)
    78                 {
    79                     if(g[i][j]>g[i][k]+g[k][j])
    80                     {
    81                         g[i][j]=g[i][k]+g[k][j];
    82                     }
    83                 }
    84             }
    85         }
    86         scanf("%d",&t1);
    87         for(int i=0; i<t1; i++)
    88         {
    89             scanf("%d%d",&x,&y);
    90             if(g[x][y]!=inf) printf("%d
    ",g[x][y]);
    91             else printf("Sorry
    ");
    92         }
    93     }
    94     return 0;
    95 }
    View Code
  • 相关阅读:
    BT5启动SSH服务
    RIP路由协议的水平分割和触发更新
    FATFS Copy Files
    spi master vhd
    altera cpld spi master verilog
    SPI bus master for System09
    How To Set a Status Flag in One Clock Domain, Clear It in Another
    VHDL 整数 小数 分数 分频
    vhdl 状态机
    The DualModulus Divider in VHDL
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3733429.html
Copyright © 2011-2022 走看看