POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
生活随笔
收集整理的這篇文章主要介紹了
POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
【題目鏈接】?http://poj.org/problem?id=1222
?
【題目大意】
給出一個6*5的矩陣,由0和1構成,要求將其全部變成0,每個格子和周圍的四個格子聯動,就是說,如果一個格子變了數字,周圍四格都會發生變化,變化即做一次與1的異或運算,輸出每個格子的操作次數。
?
【題解】
高斯消元練手題,對于每個格子的最終情況列一個方程,一共三十個方程三十個未知數,用高斯消元求解即可。
?
【代碼】
#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; }
轉載于:https://www.cnblogs.com/forever97/p/poj1222.html
總結
以上是生活随笔為你收集整理的POJ 1222 EXTENDED LIGHTS OUT(高斯消元)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #37
- 下一篇: 正则表达式 细节