关键
期望用倒退,采用高斯消元求解
代码
#include <bits/stdc++.h>
using namespace std;
const int M=1005;
double a[M][M],f[M];
int n,m;
void solve(int x) {//哪一行
for(int i=1;i<=m;i++) {//列出了m个方程组
if(i==1) {
a[i][i]=2;
a[i][i+1]=-1;
a[i][m+1]=3+f[i];
}
else if(i==m) {
a[i][i]=2;
a[i][i-1]=-1;
a[i][m+1]=3+f[i];
}
else {
a[i][i]=3;
a[i][i+1]=-1;
a[i][i-1]=-1;
a[i][m+1]=4+f[i];
}
}
for(int i=1;i<m;i++) {//这里需要变化就只有相邻的几项而已,所以可以o1进行消元
double p=a[i+1][i]/a[i][i];
a[i+1][i]=0;
a[i+1][i+1]-=a[i][i+1]*p;
a[i+1][m+1]-=a[i][m+1]*p;
}
f[m]=a[m][m+1]/a[m][m];
for(int i=m-1;i>=1;i--)
f[i]=(a[i][m+1]-f[i+1]*a[i][i+1])/a[i][i];
}
int main() {
cin>>n>>m;
int sx,sy;
cin>>sx>>sy;
if(m==1) printf("%.10lf\n",2.0*(n-sx));
else {
for(int i=n-1;i>=sx;i--)solve(i);
printf("%.10lf\n",f[sy]);
}
return 0;
}
原文链接: https://www.cnblogs.com/basicecho/p/17039803.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311059
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!