就是有一类题目:

就是给你一个图,和一个起始点(可以很抽象,比如UVA 11762需要你自己建模。也可以很具体,比如就是一个网格)

然后每个节点都有一定概率转移到另一些节点。

具体解法就是:

如果是有向无环图就用动态规划或者记忆化搜索。

否则就是高斯消元。

本题就是高斯消元。

然后如果使用高斯-约当消元法就可以省去回代的过程。

大白书上的代码是用double类型的,虽然有一些技巧可以提高数值稳定性,但是多少会有精度损失的。想要完全准确得重写分数运算。

double类型有一个技巧技巧就是定义一个const double eps=1e-8;如果小于eps就当做0,否则就当做常数。

还有求解的过程,比如ax=b

如果a==0,b!=0,那就是无解,此时可以当做x=inf。只需开一个数组记录一下即可。

如果a==b==0,那解就是0。

否则答案就是b/a。

然后所有跟inf关联的量都是inf(跟无解的关联就是无解)。

输出时特判输出就好了。

代码

#include<bits/stdc++.h>
#define maxn 110
using namespace std;
const double eps=1e-8;typedef double MAT[maxn][maxn];void gsyd(MAT A,int n)
{for(int i=0;i<n;i++){int r=i;for(int j=i+1;j<n;j++)if(fabs(A[j][i])>fabs(A[r][i]))r=j;if(fabs(A[r][i])<eps) continue;if(r!=i) for(int j=0;j<=n;j++) swap(A[r][j],A[i][j]);for(int j=0;j<n;j++) if(j!=i)for(int k=n;k>=i;k--) A[j][k]-=A[j][i]/A[i][i]*A[i][k];}
}int n;
vector<int>pre[maxn];
int od[maxn];
int inf[maxn];
int kase;int main()
{while(scanf("%d",&n)==1&&n){for(int i=0;i<n;i++) pre[i].clear();memset(od,0,sizeof(od));int u,v;while(scanf("%d %d",&u,&v)==2&&(u+v)){u--;v--;pre[v].push_back(u);od[u]++;}MAT A;memset(A,0,sizeof(A));memset(inf,0,sizeof(inf));A[0][n]=1;for(int i=0;i<n;i++){A[i][i]=1;for(unsigned int j=0;j<pre[i].size();j++)A[i][pre[i][j]]-=1.0/od[pre[i][j]];}gsyd(A,n);for(int i=n-1;~i;i--){if(fabs(A[i][i])<eps&&fabs(A[i][n])>eps) inf[i]=1;for(int j=i+1;j<n;j++) if(fabs(A[i][j])>eps&&inf[j]) inf[i]=1;}printf("Case #%d:\n",++kase);int q;scanf("%d",&q);while(q--){int x;scanf("%d",&x);x--;if(inf[x]) puts("infinity");else printf("%.3lf\n",abs(A[x][x])<eps?0.0:A[x][n]/A[x][x]);}}return 0;
}

高斯-约当消元法(随机程序,UVA 10828)相关推荐

  1. 高斯-约当消元法(转)

    高斯-约当消元法(转) 转载来源 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快 ...

  2. 4.6 高斯约当消元法

    4.6 高斯约当消元法 高斯消元法把矩阵变换为上三角阵,上三角阵还可以继续变换为对角阵.例如上面增广矩阵 [A,b][A, b][A,b] 变换为上三角阵 [24−2201140048]\left[ ...

  3. 高斯消元法(高斯·约当消元法)(浮点)

    高斯消元法,用于解多元一次方程(几乎类似模拟手动解方程). 思路: 通过等式的乘除,把方程1的x1x1x_1系数a11a11a_{11}分别化为方程2~方程n的x1x1x_1系数,然后将方程2~方程n ...

  4. python 高斯约当消元法求逆矩阵

    judge函数判断该矩阵该矩阵是否有逆矩阵 calculate计算逆矩阵 import sysclass MatrixInverse:""""求逆矩阵" ...

  5. 高斯消元法(高斯·约当消元法)(整数)

    整数高斯消元作用在于最后得出的解可以判断是否为整数. 首先看高斯消元法(浮点) 整数的高斯消元法,在消元时通过等式乘法,将同一项系数统一成它的最小公倍数,然后再进行消元. 核心代码: int n,A[ ...

  6. 高斯-约当 (Gauss-Jordan) 消元法 [学习笔记]

    朴素高斯消元 program ttdd8; var matrix:array[1..100,1..101] of double;temp:array[1..101] of double;x:array ...

  7. 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵

    选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...

  8. 高斯-约当(Gauss-Jordan)消元法

    选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...

  9. 高斯-约当(Gauss-Jordan)消元法——c++代码实现

    具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法 下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见.--大神勿喷呀,我是一个小菜 ...

最新文章

  1. PNAS:微生物组分析揭示人类皮肤的独特性
  2. 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
  3. 易混淆的c++知识点
  4. 人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者
  5. Apache多站点配置详解
  6. 洛谷 P4660 bzoj 1168 [ Baltic OI 2008 ] 手套 —— 分析+单调栈
  7. php thumb 生成缩略图
  8. JQuery合并table单元格--有限制(table格式需要注意)
  9. 五个典型的 JavaScript 面试题
  10. 权限申请弹框_安卓Q | 位置权限三态化解析,用户要关心,开发者须警惕!
  11. 微信小程序毕业设计 基于微信小程序外卖点餐系统开题报告
  12. requests-BeautifulSoup爬取美女贴吧图片
  13. 联拓生物任命钱江担任中国区总经理
  14. RO,RW,ZI概念
  15. MakeMKV for mac(MKV视频格式转换工具)
  16. Unity 判断点击的是否是UI
  17. C++计算机二级操作题(二)
  18. Node.js + Web Socket 打造即时聊天程序嗨聊(1)
  19. 软件智能的大致呈现---aaas系统预期
  20. MP4/QuickTime的“ftyp” 名称完整列表

热门文章

  1. 《计算机网络参考模型》
  2. Mysql出现问题:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)解决方案
  3. myeclipse中导入的js文件报错(出现红叉叉,提示语法错误)
  4. 推荐一款好用的CopyTranslator 翻译工具
  5. java随机生成手机号
  6. js将图片/文件等资源保存(下载)到本地
  7. lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版
  8. python怎么解压rar文件_Python解压 rar、zip、tar文件的方法
  9. 余弦定理和新闻的分类
  10. SDUT 2021 Winter Individual Contest - J(Gym-101879)