高斯消元,WA
查看原帖
高斯消元,WA
396994
Winston12321_楼主2022/9/20 21:40
#include <iostream>
using namespace std;
int n,m,x,y;
double f[1010][1010],equ[1010][1010];
void gaosi(int now)
{
	for(int i=2;i<m;++i) equ[i][i]=-3.0/4,equ[i][i-1]=1.0/4,equ[i][i+1]=1.0/4;
	equ[1][1]=-2.0/3,equ[1][2]=1.0/3;
	equ[m][m]=-2.0/3,equ[m][m-1]=1.0/3;
	for(int i=2;i<m;++i) equ[i][m+1]=-f[now+1][i]/4-1;
	equ[1][m+1]=-f[now+1][1]/3-1;
	equ[m][m+1]=-f[now+1][m]/3-1;
}
void solve(int now)
{
	for(int i=1;i<m;++i)
	{
		double ratio=equ[i+1][i]/equ[i][i];
		equ[i+1][i]-=ratio*equ[i][i];
		equ[i+1][i+1]-=ratio*equ[i][i+1];
		equ[i+1][m+1]-=ratio*equ[i][m+1];
	}
	f[now][m]=equ[m][m+1]/equ[m][m];
	for(int i=m-1;i>=1;--i)
	{
		equ[i][m+1]-=equ[i][i+1]*f[now][i+1];
		f[now][i]=equ[i][m+1]/equ[i][i];
	}
}
int main()
{
	cin>>n>>m>>x>>y;
	for(int i=n-1;i>=x;--i)
	{
		gaosi(i);
		solve(i);
	}
	printf("%.7lf",f[x][y]);
	return 0;
}
2022/9/20 21:40
加载中...