Broken robot

Broken robot

关键

期望用倒退,采用高斯消元求解

代码

#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】免费获取数百本计算机经典书籍

    Broken robot

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311059

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午11:50
下一篇 2023年2月16日 上午11:50

相关推荐