NEFU 503 矩阵求解 (非01异或的高斯消元)
生活随笔
收集整理的這篇文章主要介紹了
NEFU 503 矩阵求解 (非01异或的高斯消元)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接
中文題,高斯消元模板題。
?
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> #include <ctime> using namespace std; typedef long long in; const int maxn=300; //有equ個(gè)方程,var個(gè)變?cè)T鰪V矩陣行數(shù)為equ,列數(shù)為var+1,分別為0到var in equ,var; in a[maxn][maxn]; //增廣矩陣 in x[maxn]; //解集 in free_x[maxn];//用來(lái)存儲(chǔ)自由變?cè)?#xff08;多解枚舉自由變?cè)梢允褂?#xff09; in free_num;//自由變?cè)膫€(gè)數(shù) //返回值為-1表示無(wú)解,為0是唯一解,否則返回自由變?cè)獋€(gè)數(shù) in gcd(in a,in b) {return b==0?a:gcd(b,a%b); } in lcm(in a,in b) {return a/gcd(a,b)*b; } in gauss() {in max_r,col,k;free_num=0;for(k=0,col=0; k<equ&&col<var; k++,col++){max_r=k;for(in i=k+1; i<equ; i++)if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;if(!a[max_r][col]){k--;free_x[free_num++]=col;continue;}if(max_r!=k)for(in j=col; j<var+1; j++)swap(a[k][j],a[max_r][j]);/*for(int i=k+1;i<equ;i++){if(a[i][col]){for(int j=col;j<var+1;j++)a[i][j]^=a[k][j];}}*/for(in i=k+1; i<equ; ++i){if(a[i][col] != 0){in LCM=lcm(abs(a[i][col]),abs(a[k][col]));in ta=LCM/abs(a[i][col]),tb=LCM/abs(a[k][col]);if(a[i][col]*a[k][col] < 0)tb=-tb;for(in j=col; j<var+1; ++j)a[i][j]=a[i][j]*ta-a[k][j]*tb;}}}for(in i=k; i<equ; i++)if(a[i][col])return -1;if(k<var) return var-k;for(in i=k-1; i>=0; --i){in tmp=a[i][var];for(in j=i+1; j<var; ++j)if(a[i][j]!=0)tmp=tmp-(a[i][j]*x[j]);x[i]=tmp/a[i][i];}/*for(int i=var-1;i>=0;i--){x[i]=a[i][var];for(int j=i+1;j<var;j++)x[i]^=(a[i][j]&&x[j]);}*/return 0; } in n; void init() {memset(a,0,sizeof(a));memset(x,0,sizeof(x));equ=n;var=n; } void solve() {in t=gauss();if(t==-1){puts("no sovle!");}else if(t==0){for(int i=0; i<n-1; i++)printf("%d ",x[i]);printf("%d\n",x[n-1]);}else{puts("more sovle!");} } int main() {while(scanf("%lld",&n)!=EOF){init();for(int i=0; i<n; i++)for(int j=0; j<n; j++)scanf("%lld",&a[i][j]);for(int i=0; i<n; i++)scanf("%lld",&a[i][n]);solve();}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/Ritchie/p/5865872.html
總結(jié)
以上是生活随笔為你收集整理的NEFU 503 矩阵求解 (非01异或的高斯消元)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 中浮点数---------Bi
- 下一篇: $(document).ready()