hdu 3359 Kind of a Blur

来源:互联网 发布:oa系统 node 编辑:程序博客网 时间:2024/05/20 05:54

高斯消元,直接套模板

#include <CSTDIO>#include <QUEUE>using namespace std;// hdu 3359/*高斯消元 求期望也是数字图像处理的一种应用*/const int MAXN = 110;const double _inf = 1e-9;double a[MAXN][MAXN], x[MAXN]; // 方程左边的矩阵和等式右边的值, x存放最后结果int equ, val;// 方程数 未知数个数inline double mabs(double _X){return _X<0?-_X:_X;}int gauss(){int i,j,k,col,max_r;    for(k=0,col=0;k<equ&&col<val;k++,col++)    {        max_r=k;        for(i=k+1;i<equ;i++)if(mabs(a[i][col])>mabs(a[max_r][col]))max_r=i;if(mabs(a[max_r][col])<_inf) return 0;if(k!=max_r){for(j=col;j<val;j++)swap(a[k][j],a[max_r][j]);swap(x[k],x[max_r]);}x[k]/=a[k][col];for(j=col+1;j<val;j++)a[k][j]/=a[k][col];a[k][col]=1;for(i=0;i<equ;i++)if(i!=k){x[i]-=x[k]*a[i][k];for(j=col+1;j<val;j++)a[i][j]-=a[k][j]*a[i][col];a[i][col]=0;}    }    return 1;}int w, h, d;double data[MAXN][MAXN];int main()   {#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endifint i, j, k, f = 1;while (scanf("%d%d%d", &w, &h, &d) == 3 && (w+h+d)){if (!f)puts("");elsef = 0;for (i = 0; i< h; ++i){for (j = 0; j< w; ++j){scanf("%lf", &data[i][j]);}}equ = val = h*w;memset(a, 0, sizeof a);memset(x, 0, sizeof x);for (i = 0; i<h; ++i){for (j = 0; j< w; ++j){k = i*w+j;x[k] = 0.0;int cnt = 0, aa, bb;for ( aa = -d; aa<= 0; ++aa){for ( bb = -aa-d; bb<= aa+d; ++bb){if ((i+aa)>=0 && (i+aa)<h && (j+bb)>=0 && (j+bb)<w){++cnt;a[k][(i+aa)*w+(j+bb)] = 1.0;}}}for ( aa = 1; aa<= d; ++aa){for ( bb = aa-d; bb<= -aa+d; ++bb){if ((i+aa)>=0 && (i+aa)<h && (j+bb)>=0 && (j+bb)<w){++cnt;a[k][(i+aa)*w+(j+bb)] = 1.0;}}}x[k] = data[i][j]*cnt;}}gauss();for (i = 0, k = 0; i< h; ++i){for (j = 0; j< w; ++j, ++k){printf("%8.2lf", x[k]);}puts("");}}return 0;}