标签:
4 0111 0011 0001 0100
0.15 1.49 0.83 1.53
Problem : 5097 ( Page Rank ) Judge Status : Accepted RunId : 14492913 Language : C++ Author : lwj1994 Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta #include<stdio.h> #include<string.h> #include<math.h> #define eps 1e-10 char map[3030]; double ans[3030][3030]; double q[2][3030]; int n; void muti(double a[][3030],double num) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) a[i][j]*=num; } } void add(double a[][3030],double b[][3030]) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) a[i][j]+=b[i][j]; } } int jud() { double ans=0; int i; for(i=0;i<n;i++) { ans+=(q[0][i]-q[1][i])*(q[0][i]-q[1][i]); } //ans=sqrt(ans); if(fabs(ans)<eps) return 1; return 0; } int main() { //int n; while(scanf("%d",&n)!=EOF) { int i,j; double a=0.85; memset(ans,0,sizeof(ans)); for(i=0;i<n;i++) { int sum=0; scanf("%s",&map); for(j=0;j<n;j++) { if(map[j]=='1') sum++; //U[i][j]=1; } for(j=0;j<n;j++) { if(map[j]=='1') ans[j][i]=1.0/sum; } } muti(ans,a); // muti(U,1.0/n*(0.15)); // printf("\n"); // add(ans,U); for(i=0;i<n;i++) for(j=0;j<n;j++) ans[i][j]+=(0.15/n); int p=0; for(i=0;i<n;i++) { q[p][i]=1; q[p^1][i]=0; } //mmuti(q[p],ans,q[p^1]); //p^=1; while(!jud()) { //q[p^1]=mmuti(q[p],ans); for(i=0;i<n;i++) { q[p^1][i]=0; for(j=0;j<n;j++) q[p^1][i]+=q[p][j]*ans[i][j]; } p^=1; } printf("%.2lf",q[p][0]); for(i=1;i<n;i++) { printf(" %.2lf",q[p][i]); } printf("\n"); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDOJ 题目5097 Page Rank(矩阵运算,模拟)
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/47612997