POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
生活随笔
收集整理的這篇文章主要介紹了
POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
【題目鏈接】?http://poj.org/problem?id=1222
?
【題目大意】
給出一個(gè)6*5的矩陣,由0和1構(gòu)成,要求將其全部變成0,每個(gè)格子和周?chē)乃膫€(gè)格子聯(lián)動(dòng),就是說(shuō),如果一個(gè)格子變了數(shù)字,周?chē)母穸紩?huì)發(fā)生變化,變化即做一次與1的異或運(yùn)算,輸出每個(gè)格子的操作次數(shù)。
?
【題解】
高斯消元練手題,對(duì)于每個(gè)格子的最終情況列一個(gè)方程,一共三十個(gè)方程三十個(gè)未知數(shù),用高斯消元求解即可。
?
【代碼】
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; int T,p[35][35],Cas=1; void Gauss(int n,int m){int i,j,k,h,w;for(i=j=1;j<m;j++,w=0){for(k=i;k<=n;k++)if(p[k][j])w=k;if(w){for(k=j;k<=m;k++)swap(p[i][k],p[w][k]);for(k=1;k<=n;k++)if(k!=i&&p[k][j]){for(h=j;h<=m;h++)p[k][h]^=p[i][h];}i++;}if(i>n)break;} } int main(){scanf("%d",&T);while(T--){memset(p,0,sizeof(p));for(int i=1;i<=30;i++){p[i][i]=1;if(i>6)p[i-6][i]=1;if(i<25)p[i+6][i]=1;if(i%6!=1)p[i-1][i]=1;if(i%6!=0)p[i+1][i]=1;}for(int i=1;i<=30;i++){scanf("%d",&p[i][31]);}Gauss(30,31);printf("PUZZLE #%d\n",Cas++);for(int i=1;i<=30;i++){printf("%d",p[i][31]);if(i%6==0)puts("");else printf(" "); }}return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/forever97/p/poj1222.html
總結(jié)
以上是生活随笔為你收集整理的POJ 1222 EXTENDED LIGHTS OUT(高斯消元)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Codeforces Round #37
- 下一篇: 正则表达式 细节