hdu5097Page Rank

来源:互联网 发布:脱壳软件 哪个好 编辑:程序博客网 时间:2024/06/03 13:39

这道题也是读题难啊,就是矩阵运算,然后我异或不精通,导致赛时没能写出来,一定得好好练代码能力。。

#include<cstdio>#include<cstring>#include<cmath>using namespace std;const double eps = 1e-10;const double h=0.85;const int maxn = 3020;double q[10][maxn],jz[maxn][maxn];char s[maxn];int n;double sqr(double x){    return x*x;}int judge(){    double cnt=0;    for(int i=0; i<n; i++)        cnt+=sqr(q[0][i]-q[1][i]);    return fabs(cnt)<eps;}int main(){    while(~scanf("%d",&n))    {        double ans = (1.0-h)/n;        for(int i=0; i<n; i++)        {            double sum=0;            scanf("%s",s);            for(int j=0; j<n; j++)            {                sum+=(s[j]-'0');            }            for(int j=0; j<n; j++)            {                if(s[j]=='1')                    jz[j][i]=(1.0/sum)*h+ans;                else                    jz[j][i]=ans;            }            q[0][i]=1.0;            q[1][i]=0.0;        }        int k=0;        while(!judge())        {            for(int i=0; i<n; i++)            {                q[k^1][i]=0.0;                for(int j=0; j<n; j++)                    q[k^1][i]+=q[k][j]*jz[i][j];            }            k^=1;        }        for(int i=0; i<n; i++)        {            if(!i)                printf("%.2lf",q[0][i]);            else                printf(" %.2lf",q[0][i]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击