zoukankan      html  css  js  c++  java
  • hdu 2157 矩阵 (没想到也可以这个用矩阵 做)




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


    题意:求从点s 走k步 到点 t  的方法种数

    #include<iostream>
    #include<string.h>
    using namespace std;
    struct node{int p[22][22];};
    node a,b;
    int n;
    
    node cheng(node a,node b)
    {
        node c;
        int i,j,k;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            {
                c.p[i][j]=0;
                for(k=0;k<n;k++)
                    c.p[i][j]=(c.p[i][j]+a.p[i][k]*b.p[k][j])%1000;
            }
        return c;
    }
    
    void solve(int n)
    {
        while(n)
        {
            if(n%2==1)
                b=cheng(a,b);
            a=cheng(a,a);
            n/=2;
        }
    }
    
    int main()
    {
        int i,j,m,T,s,t,A,B,k,ss[22][22];
        while(scanf("%d%d",&n,&m))
        {
            if(n==0&&m==0)
                break;
            memset(ss,0,sizeof(ss));
            while(m--)
            {
                scanf("%d%d",&s,&t);
                ss[s][t]=1;
            }
            scanf("%d",&T);
            while(T--)
            {
                for(i=0;i<n;i++)
                    for(j=0;j<n;j++)
                        a.p[i][j]=ss[i][j];
                scanf("%d%d%d",&A,&B,&k);
                for(i=0;i<n;i++)
                    for(j=0;j<n;j++)                 //单位矩阵 b
                       if(i==j)    b.p[i][j]=1;
                       else     b.p[i][j]=0;
                solve(k);
                if(b.p[A][B]<0)
                    printf("%d\n",b.p[A][B]+1000);
                else printf("%d\n",b.p[A][B]);
            }
        }
        return 0;
    }
  • 相关阅读:
    MySQL8.0 不能使用group by解决方法
    xtrabackup备份恢复
    pycharm使用
    CMDB开发(三)
    Restful接口规范
    django-rest-framework框架(一)
    CMDB开发(二)
    CMDB开发(一)
    数据可视化之matplotlib模块
    数据分析之pyecharts v1版本
  • 原文地址:https://www.cnblogs.com/assult/p/3109034.html
Copyright © 2011-2022 走看看