(1)高斯消元法求解 ( 適用於01方矩陣的問題,不適用在解線性方程組中)
首先介紹一下怎樣用高斯消元法解題!!
這個遊戲的名字叫做lights out。乙個板子上面有mxn個按鈕,按鈕也是燈。每次按下乙個按鈕,這個按鈕和它的上下左右相鄰按鈕將同時切換各自的亮滅狀態。給你乙個初始狀態,請給出一種方法,按某些按鈕,使得所有的燈都滅。
這個遊戲有一些技巧:
1、按按鈕的順序可以隨便。
2、任何乙個按鈕都最多需要按下1次。因為按下第二次剛好抵消第一次,等於沒有按。
這個問題可以轉化成數學問題。
乙個燈的布局可以看成乙個0、1矩陣。以3x3為例:
0 1 0
1 1 0
0 1 1
表示乙個布局。其中0表示燈滅,1表示燈亮。
每次按下按鈕(poj1222)或者叫乙個宿舍關燈(0998),可以看成在原矩陣上加(模2加,就是按位異或)上乙個如下的矩陣:
0 1 0
1 1 1
0 1 0
上述矩陣中的1表示按下第2行第2列的按鈕時,作用的範圍。如果按左上角的按鈕,就是:
1 1 0
1 0 0
0 0 0
我們記l為待求解的原始布局矩陣。a(i,j)表示按下第i行第j列的按鈕時的作用範圍矩陣。在上述例子中,
l=0 1 0
1 1 0
0 1 1
a(1,1)=
1 1 0
1 0 0
0 0 0
a(2,2)=
0 1 0
1 1 1
0 1 0
假設x(i,j)表示:想要使得l回到全滅狀態,第i行第j列的按鈕是否需要按下。0表示不按,1表示按下。那麼,這個遊戲就轉化為如下方程的求解:
l + x(1,1)*a(1,1) + x(1,2)*a(1,2) + x(1,3)*a(2,3) + x(2,1)*a(2,1) + ... + x(3,3)*a(3,3) = 0
其中x(i,j)是未知數。方程右邊的0表示零矩陣,表示全滅的狀態。直觀的理解就是:原來的l狀態,經過了若干個a(i,j)的變換,最終變成0:全滅狀態。
由於是0、1矩陣,上述方程也可以寫成:
x(1,1)*a(1,1) + x(1,2)*a(1,2) + x(1,3)*a(2,3) + x(2,1)*a(2,1) + ... + x(3,3)*a(3,3) = l
這是乙個矩陣方程。兩個矩陣相等,充要條件是矩陣中每個元素都相等。將上述方程展開,便轉化成了乙個9元1次方程組:
簡單地記做:aa * xx = ll
這個方程有唯一解:
x(1,1) x(1,2) x(1,3)
x(2,1) x(2,2) x(2,3)
x(3,1) x(3,2) x(3,3)
=1 1 1
0 0 0
0 0 1
也就是說,按下第一行的3個按鈕,和右下角的按鈕,就能使l狀態變成全滅狀態。
對於固定行列的陣列來說,aa矩陣也是確定的。是否存在解,解是否唯一,只與aa矩陣有關。對於唯一解的情形,只要將ll乘以aa的逆矩陣即可。具體求aa的逆矩陣的方法,可以用高斯消元法。
a[i][j]為1當且僅當且僅當第j個燈變化會影響到第i個燈變化。b[i] = 1表示第i個燈開始時不是
關著的(即第i個燈最後的結果是要變化)。
以上轉此題可以通過列舉第一行的狀態,然後推下一行使前一行全滅的態,直到最後一行,如果最後一行全滅則此種法可以
貼自己**
#include #include #include #include #include #include#include#include#include#includeusing namespace std;
int ma[10][10],a[40][40],ans[40];
void init()
if(i+1<5)
if(j-1>=0)
if(j+1<6)
}}int gauss(int epu,int var)
{ int i,j,k,col;
int max_r;
// num=0;
for(k=0,col=0;ka[max_r][col])
max_r=i;
if(a[max_r][col]!=0)
{ if(max_r!=k)
{ for(i=col;i
poj 1222 高斯消元
第一次寫高斯消元 題意很簡單 就是是全部燈變暗,一盞燈開關會使周圍的燈變化,初始狀態給了。每盞燈就是乙個x a就是相關關係 就是求 ax b 的解 自己寫的模版有點搓,可以去別的文章去看看 優美點的 include include include include include using name...
高斯消元 poj 1222
高斯消元求唯一解集x 關鍵是初始化構造係數矩陣,有了增廣矩陣套模板即可 poj 1222 高斯消元 題意 類似於翻轉棋,按一下上下中左右翻轉,給定初始狀態,問回到全0的狀態的按鍵方案 思路 對於每個位置,倒著想,初始為0,上下中左右加起來為初始狀態,每乙個位置皆如此。30個位置,30個變數,30個方...
Poj 1222 高斯消元
校賽預選卡了一道高斯消元的題,找到資料學習了下,a個模板題熟練熟練。寫錯乙個數字坑了好久,悲催。題意 給定5 6的燈陣,0為關1為開,每次開關 x,y 會同時開關 x 1,y x 1,y x,y 1 x,y 1 四燈 出界不予討論即可 給定初始燈陣,求使所有燈都關閉的開燈方法。分析 從上往下從左往右...