輸入乙個包含n個方程n個未知數的異或線性方程組。
方程組中的係數和常數為0或1,每個未知數的取值也為0或1。
求解這個方程組。
異或線性方程組示例如下:
m[1][1]x[1] ^ m[1][2]x[2] ^ … ^ m[1][n]x[n] = b[1]
m[2][1]x[1] ^ m[2][2]x[2] ^ … ^ m[2][n]x[n] = b[2]
…m[n][1]x[1] ^ m[n][2]x[2] ^ … ^ m[n][n]x[n] = b[n]
其中「^」表示異或(xor),m[i][j]表示第i個式子中x[j]的係數,b[i]是第i個方程右端的常數,取值均為0或1。
輸入格式
第一行包含整數n。
接下來n行,每行包含n+1個整數0或1,表示乙個方程的n個係數以及等號右側的常數。
輸出格式
如果給定線性方程組存在唯一解,則輸出共n行,其中第i行輸出第i個未知數的解。
如果給定線性方程組存在多組解,則輸出「multiple sets of solutions」。
如果給定線性方程組無解,則輸出「no solution」。
資料範圍
1≤n≤100
輸入樣例:
3
1 1 0 1
0 1 1 0
1 0 0 1
輸出樣例:
1
00
n = int(input())
a =
for i in range(n):
def guass():
global n
r = 0
for c in range(n):
t = r
# 首先找到當前列中的1
for i in range(r, n):
if a[i][c] == 1:
t = i
break
# 如果都為0就continue
if a[t][c] == 0: continue
# 交換
a[r], a[t] = a[t], a[r]
# 將這一列為1的與第r行異或
for i in range(r+1, n):
if a[i][c] == 1:
for j in range(c, n+1):
a[i][j] ^= a[r][j]
r += 1
if r < n:
for i in range(r, n):
if a[i][n] == 1: return 1 # 無解
return 2 # 無窮解
for i in range(n-1, -1, -1):
for j in range(i):
if a[j][i] == 1:
a[j][n] ^= a[i][n]
return 0
ret = guass()
if ret == 1: print('no solution')
elif ret == 2: print('multiple sets of solutions')
else:
for i in range(n): print(a[i][n])
高斯消元法解異或線性方程組
對於一組線性方程組,列舉每一列進行如下步驟 1 找到首元非零行 2 將這一行交換到第一行 3 將這一行的第乙個數變成1,對當前這一行進行操作,不涉及矩陣的初等變換 4 將下面所有行的當前列全部消成0,利用矩陣的初等變換 對於原異或方程組進行變換後 如果得到的矩陣是乙個完美的上三角矩陣,則說明方程組有...
高斯消元解線性方程組
高斯消去法是消去法的一種特殊形式,它包括消元和回帶兩個過程。高斯消去法求解線性方程組分為以下兩大步 1 將係數矩陣a經過一系列的初等行變換程式設計右上三角矩陣,其常數向量b也同時做相應的變換,即 在變換過程中,採用原地工作,即經變換後的元素仍存放在原來的儲存單元中。為了實現上述目標,對於k從1到n ...
高斯消元解線性方程組
高斯消元可以通過初等行列變化把 增廣矩陣 轉換成 階梯型矩陣,進而求解 n 個線性方程組的解,其時間複雜為o n 3 初等行列變換 對乙個方程組進行以下三個操作不會影響方程的解 例如線性方程組為 a11x1 a12x2 a13x3 a1nxn b1 a21x1 a22x2 a23x3 a2nxn b...