題目
題意很簡單;
根據d列出一個n*m元一次方程組即可,高斯消元模板題。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define MAXN 10
#define EPS 1e-11
using namespace std;
int n,m,d,var,equ;
double a[MAXN*MAXN+
2][MAXN*MAXN+
2],mat[MAXN+
2][MAXN+
2];
void read(){
int i,j,ii,jj;
for(i=
1;i<=n;i++)
for(j=
1;j<=m;j++)
scanf(
"%lf",&mat[i][j]);var=equ=n*m;
for(i=
1;i<=n;i++)
for(j=
1;j<=m;j++){
for(ii=
1;ii<=n;ii++)
for(jj=
1;jj<=m;jj++)
if(
abs(i-ii)+
abs(j-jj)<=d)a[(i-
1)*m+j][(ii-
1)*m+jj]++,a[(i-
1)*m+j][var+
1]++;a[(i-
1)*m+j][var+
1]*=mat[i][j];}
}
void gauss_jordan(){
int i,j,row,col,mxr;
for(row=col=
1;row<=equ&&col<=var;row++,col++){mxr=row;
for(i=row+
1;i<=equ;i++)
if(
fabs(a[i][col])>
fabs(a[mxr][col]))mxr=i;
if(mxr!=row)swap(a[mxr],a[row]);
if(
fabs(a[row][col])<EPS){row--;
continue;}
for(i=
1;i<=equ;i++)
if(i!=row&&
fabs(a[i][col])>EPS)
for(j=var+
1;j>=col;j--)a[i][j]-=a[row][j]/a[row][col]*a[i][col];}
}
void print(){
int i,j;
for(i=
1;i<=n;i++){
for(j=
1;j<=m;j++)
printf(
"%8.2lf",a[(i-
1)*m+j][var+
1]/a[(i-
1)*m+j][(i-
1)*m+j]);
printf(
"\n");}
}
int main()
{
int cnt=
0;
while(~
scanf(
"%d%d%d",&m,&n,&d)&&m&&n){
if(cnt++)
printf(
"\n");
memset(a,
0,
sizeof a);
memset(mat,
0,
sizeof mat);read();gauss_jordan();print();}
return 0;
}
轉載于:https://www.cnblogs.com/outerform/p/5921879.html
總結
以上是生活随笔為你收集整理的【高斯消元】[HDU 3359][POJ3999][UVALive4741]Kind of a Blur的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。