zoukankan      html  css  js  c++  java
  • 矩阵乘法+folyd(hdu2807)

        难度一般,坑了我好久,并且现学了一下矩阵乘法

        题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2807

        AC代码

        

    #include<bits/stdc++.h>
    using namespace std;
    #define INT_MAX 0x73f3f3f
    typedef struct W_w{
        int sum[100][100];
    }wang;
    wang y[100];
    int m,n;
    int mp[100][100];
    wang z;
    bool bj(wang a,wang b){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(a.sum[i][j]!=b.sum[i][j]) return false;
            }
        }
        return true;
    }
    void jzc(int a,int b){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                int sum=0;
                for(int k=0;k<n;k++){
                    sum+=y[a].sum[i][k]*y[b].sum[k][j];
                }
                z.sum[i][j]=sum;
            }
        }
    //    for(int i=0;i<n;i++){
    //        for(int j=0;j<n;j++){
    //            printf("%d ",y[a].sum[i][j]);
    //        }
    //        printf("
    ");
    //    }
    //    printf("
    ");
    //     for(int i=0;i<n;i++){
    //        for(int j=0;j<n;j++){
    //            printf("%d ",y[b].sum[i][j]);
    //        }
    //        printf("
    ");
    //    }
    //    printf("
    ");
    //     for(int i=0;i<n;i++){
    //        for(int j=0;j<n;j++){
    //            printf("%d ",z.sum[i][j]);
    //        }
    //        printf("
    ");
    //    }
    //    printf("
    ");
    }
    void floyd(){
        for(int k=0;k<m;k++){
            for(int i=0;i<m;i++){
                //if(i==j) continue;
                for(int j=0;j<m;j++){
                    if(mp[i][k]+mp[k][j]<mp[i][j]){
                        mp[i][j]=mp[i][k]+mp[k][j];
                    }
                }
            }
        }
    }
    int main()
    {
        while(~scanf("%d %d",&m,&n)){
            if(m==0&&n==0) break;
            for(int i=0;i<99;i++){
                for(int j=0;j<99;j++){
                    if(i==j){
                        mp[i][j]=0;
                    }
                    else{
                        mp[i][j]=100000000;
                    }
                }
            }
            memset(y,0,sizeof(y));
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    for(int k=0;k<n;k++){
                        scanf("%d",&y[i].sum[j][k]);
                    }
                }
            }
            for(int i=0;i<m;i++){
                for(int j=0;j<m;j++){
                    if(i==j) continue;
                    jzc(i,j);
    //                for(int a=0;a<n;a++){
    //                    for(int b=0;b<n;b++){
    //                        printf("+%d ",z.sum[a][b]);
    //                    }
    //                    printf("
    ");
    //                }
                    for(int k=0;k<m;k++){
                        if(k==j||k==i) continue;
                        if(bj(z,y[k])){
                            mp[i][k]=1;
                            mp[j][k]=1;
                        }
                    }
                }
            }
            floyd();
            int kk;
            scanf("%d",&kk);
            for(int i=0;i<kk;i++){
                int a,b;
                scanf("%d %d",&a,&b);
                if(mp[a-1][b-1]==100000000){
                    printf("Sorry
    ");
                }
                else printf("%d
    ",mp[a-1][b-1]);
            }
        }
        return 0;
    }
    /*
    3 3
    1 1 2
    2 2 3
    3 3 5
    1 1 6
    1 1 2
    2 2 1
    4 4 4
    3 3 3
    2 2 2
    1
    1 3
    */
  • 相关阅读:
    数据探索
    String的相关操作总结
    2015/6/10 按位运算 补码求法
    15年6月8号 jsp内置对象总结
    投资小故事
    定投出来的千万富翁
    股票PE的应用
    幸福人生的资产配置
    定投6年,以亏损收场,她到底做错了什么?
    一则故事让你轻松了解保险的实质
  • 原文地址:https://www.cnblogs.com/fzw1523/p/11185277.html
Copyright © 2011-2022 走看看