(高斯消元)類關燈問題

2021-10-04 21:50:59 字數 2448 閱讀 1678

對於高斯消元,最初的接觸是行最簡階梯矩陣的化簡。

我認為只分成兩個部分:1:向前步驟  2:向後步驟

前者是往下推,後者是回代.

in my opinion, pushing down is all about findingthe pivot entry, determining the number offree entries, and determining whether there is asolutionon the last row.

應用(個(se)人(se)總(fa)結(dou)):

for example:

poj 1830 開關問題

每乙個燈有兩種狀態,分別用0和1表示,當一種燈的狀態改變的時候,可能對與它關聯的燈的狀態造成影響.

我們可以使用0和1首先構造出來乙個表示每盞燈狀態的列向量x=(x1 x2 x3....xn). 再構造乙個係數矩陣 y=(y1 y2 .... yn)以及乙個變換矩陣a.滿足關係a*y=x.這裡變換矩陣第i行第j列代表的是第j盞燈會改變第i盞燈的狀態(1代表i的改變對j有影響,0代表無影響).

(之所以這樣構造是因為我們想通過某種方法,求出方程的解,使得這個求出的解剛好就是題目中所要求的。)

係數矩陣存放解的係數,大小為n*1,規定每盞燈最多只能進行一次開關操作(個人認為題面這裡說的不是太清楚,應該是x改變引發y改變,此時y的改變不算是一次開關操作),那麼就要進行整體操作,a中的j列剛好就是j對1-n的影響,i行算出來的最後結果剛好就是這個燈最後的狀態,那麼我們可以對於狀態改變的燈設定為1,對於狀態沒有改變的燈的狀態設定為0(x矩陣).然後高斯消元就行了.

對於樣例1:

存在兩個自由變元,每個自由變元有兩個數字可以選擇,結果為pow(2,自由變元個數)

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=50;

void debug()

int num1[maxn],num2[maxn];

int n;

int equ,var;

int a[maxn][maxn];

int x[maxn];

int free_x[maxn];

int free_num;

int gauss()

}if(a[max_r][col]==0)

if(max_r!=k)

int num1[maxn],num2[maxn];

int n;

int equ,var;

int a[maxn][maxn];

int x[maxn];

int free_x[maxn];

int free_num;

int gauss()

}if(a[max_r][col]==0)

if(max_r!=k)

for(int i=0;i<5;++i)

if(i<4)

if(j>0)

if(j<5)}}

equ=var=30;

gauss();

printf("puzzle #%d\n",casee++);

for(int i=0;i<5;++i)}}

return 0;

}

法2:二進位制列舉

第一行有6個元素,一共有2^6中選擇的情況,二進位制列舉第一行要改變的方式.

然後從第二行開始,每次通過上一行哪個位置有1進行關燈.

最後特判一下最後一行是不是全部都是0,如果是的話就輸出,如果不是的話就繼續列舉.

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

int putss[10][10];

void judge(int x,int y)

else if(y==6)

else

if(x==1)

else if(x>1&&x<5)

else

}void init()

}}void solve()

}solve();

}return 0;

}

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...

開關問題 高斯消元

description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的 開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過 若干次開關操作後使得最後n個開關達到乙個特定的狀態。對於任意乙個開...

矩陣消元 高斯消元

安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...