高斯-约当消元法(随机程序,UVA 10828)
就是有一类题目:
就是给你一个图,和一个起始点(可以很抽象,比如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)相关推荐
- 高斯-约当消元法(转)
高斯-约当消元法(转) 转载来源 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快 ...
- 4.6 高斯约当消元法
4.6 高斯约当消元法 高斯消元法把矩阵变换为上三角阵,上三角阵还可以继续变换为对角阵.例如上面增广矩阵 [A,b][A, b][A,b] 变换为上三角阵 [24−2201140048]\left[ ...
- 高斯消元法(高斯·约当消元法)(浮点)
高斯消元法,用于解多元一次方程(几乎类似模拟手动解方程). 思路: 通过等式的乘除,把方程1的x1x1x_1系数a11a11a_{11}分别化为方程2~方程n的x1x1x_1系数,然后将方程2~方程n ...
- python 高斯约当消元法求逆矩阵
judge函数判断该矩阵该矩阵是否有逆矩阵 calculate计算逆矩阵 import sysclass MatrixInverse:""""求逆矩阵" ...
- 高斯消元法(高斯·约当消元法)(整数)
整数高斯消元作用在于最后得出的解可以判断是否为整数. 首先看高斯消元法(浮点) 整数的高斯消元法,在消元时通过等式乘法,将同一项系数统一成它的最小公倍数,然后再进行消元. 核心代码: int n,A[ ...
- 高斯-约当 (Gauss-Jordan) 消元法 [学习笔记]
朴素高斯消元 program ttdd8; var matrix:array[1..100,1..101] of double;temp:array[1..101] of double;x:array ...
- 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵
选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...
- 高斯-约当(Gauss-Jordan)消元法
选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...
- 高斯-约当(Gauss-Jordan)消元法——c++代码实现
具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法 下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见.--大神勿喷呀,我是一个小菜 ...
最新文章
- PNAS:微生物组分析揭示人类皮肤的独特性
- 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
- 易混淆的c++知识点
- 人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者
- Apache多站点配置详解
- 洛谷 P4660 bzoj 1168 [ Baltic OI 2008 ] 手套 —— 分析+单调栈
- php thumb 生成缩略图
- JQuery合并table单元格--有限制(table格式需要注意)
- 五个典型的 JavaScript 面试题
- 权限申请弹框_安卓Q | 位置权限三态化解析,用户要关心,开发者须警惕!
- 微信小程序毕业设计 基于微信小程序外卖点餐系统开题报告
- requests-BeautifulSoup爬取美女贴吧图片
- 联拓生物任命钱江担任中国区总经理
- RO,RW,ZI概念
- MakeMKV for mac(MKV视频格式转换工具)
- Unity 判断点击的是否是UI
- C++计算机二级操作题(二)
- Node.js + Web Socket 打造即时聊天程序嗨聊(1)
- 软件智能的大致呈现---aaas系统预期
- MP4/QuickTime的“ftyp” 名称完整列表
热门文章
- 《计算机网络参考模型》
- Mysql出现问题:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)解决方案
- myeclipse中导入的js文件报错(出现红叉叉,提示语法错误)
- 推荐一款好用的CopyTranslator 翻译工具
- java随机生成手机号
- js将图片/文件等资源保存(下载)到本地
- lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版
- python怎么解压rar文件_Python解压 rar、zip、tar文件的方法
- 余弦定理和新闻的分类
- SDUT 2021 Winter Individual Contest - J(Gym-101879)