高斯消元\高斯约当 模板
来源:互联网 发布:2kol台服球星数据 编辑:程序博客网 时间:2024/05/21 06:45
实数版:O(n^3)
解方程:
#include <cstdio>#include <algorithm>#define rep(i,l,r) for (int i=l;i<=r;++i)const double EPS=1e-8;int sign(const double &x){return x<-EPS?-1:x>EPS;}const int MAX_N=105,MAX_M=1005;double a[MAX_N][MAX_M+MAX_N];int n,m;void gauss(){ rep(i,1,n){ int p=1; rep(j,i,n) if (sign(a[j][i])){p=j;break;} //这里应该写成绝对值最大的精度高一些 rep(k,1,n+m) std::swap(a[i][k],a[p][k]); rep(j,1,n) if (i!=j){ double r=a[j][i]/a[i][i]; rep(k,i,n+m) a[j][k]-=r*a[i][k]; } } rep(i,n+1,n+m) rep(j,1,n) printf("%.3f%c",a[j][i]/a[j][j],j==n?'\n':' ');}int main(){ scanf("%d%d",&n,&m); rep(i,1,n) rep(j,1,n) scanf("%lf",&a[i][j]); rep(i,n+1,n+m) rep(j,1,n) scanf("%lf",&a[j][i]); gauss();}
整数版:
有O(N^3) (LCM)
O(N^3logM) (模拟GCD)
O(N^3)
(C一份~~~)
int Gauss() { int i,j,k; int max_r; int ta,tb; int free_x_num; int free_index; int LCM,tmp; int col = 0; for(k=0; k<equ && col<var; k++,col++) { max_r = k; for(i=k+1; i<equ; i++) if(abs(a[i][col]) > abs(a[max_r][col])) max_r = i; if(max_r != k) for(j=k; j<var+1; j++) swap(a[k][j],a[max_r][j]); if(a[k][col] == 0) { k--; continue; } for(i=k+1; i<equ; i++) { if(a[i][col] != 0) { LCM = lcm(abs(a[i][col]),abs(a[k][col])); ta = LCM / abs(a[i][col]); tb = LCM / abs(a[k][col]); if(a[i][col] * a[k][col] < 0) tb = - tb; for(j = col ; j<var+1; j++) a[i][j] = a[i][j]*ta - a[k][j]*tb; } } }
XOR方程组(没有压位):O(N^3)
压位:O(NlogMAX)
#include <cstdio>#include <algorithm>#define rep(i,l,r) for (int i=l;i<=r;++i)#define per(i,r,l) for (int i=r;i>=l;--i)const int MAX_N=40;bool a[MAX_N][MAX_N];int n,m;void gauss(){rep(i,1,n){rep(j,i,n) if (a[j][i]>a[i][i]) rep(k,1,n+1) std::swap(a[i][k],a[j][k]);rep(j,1,n) if (i!=j&&a[j][i]) rep(k,i,n+1) a[j][k]^=a[i][k];}}int ans=100;bool x[MAX_N];void dfs(int v,int tot){ //自由元枚举if (tot>ans) return;if (v<=0){ans=tot;return;}if (a[v][v]){x[v]=a[v][n+1];rep(k,v+1,n) x[v]^=a[v][k]&x[k];dfs(v-1,tot+x[v]);}else{x[v]=1;dfs(v-1,tot+1);x[v]=0;dfs(v-1,tot);}}int main(){freopen("lights.in","r",stdin);freopen("lights.out","w",stdout);scanf("%d%d",&n,&m);rep(i,1,n) a[i][i]=a[i][n+1]=1;rep(i,1,m){int x,y;scanf("%d%d",&x,&y);a[x][y]=a[y][x]=1;}gauss();dfs(n,0);printf("%d\n",ans);}
AND :http://wenku.baidu.com/link?url=PsKxF1uwSUIoTx9zuOpTQbSPuiQrTtDSx_TnGXI6r_nw1Evg37lqXOJL3CODAokkV9JVhw4qqXMGhyItwihn-cjan1jKth7-PQoB0s9nN1K
0 0
- 高斯消元\高斯约当 模板
- 浮点数高斯约当消元法模板
- 叮叮当 -- tp模板 语法
- 函数模板当函数参数
- 当模板函数遇上数组参数
- 当define或者typedef遇到模板
- 当函数模板遇到普通函数
- java、jsp连接数据库,可当模板
- ccf 高速公路(顺便当tarjan模板)
- 当
- 当
- 当。
- 当.......
- 当
- 当
- 当
- 高斯消元模板
- 高斯消元模板
- SQL、LINQ、Lambda 三种用法(转)
- 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
- Java序列化格式-Java基础
- eclipse智能提示,实现VC编程助手功能
- 如何去了解JavaScript引擎的工作原理
- 高斯消元\高斯约当 模板
- Wrapfs : a stackable file system(一种堆栈式文件系统)
- 2014年4月2日
- Apache负载均衡的几种方式
- X86-64寄存器和栈帧
- 利用UIImagePickerController进行视频录像
- 网站总结
- 【js学习笔记-113】------<canvas>绘制和填充曲线
- 30分钟让你精通html