您的位置:首页 > 其它

poj 1222 高斯消元(改改模板)

2015-11-07 01:50 295 查看
先贴一下大牛博客里面的高斯消元专题 http://blog.csdn.net/qiqijianglu/article/details/7945197
然后这个题构造矩阵有点意思,比较有想法,构造出来就直接套模板了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
#include <queue>
#include <map>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <cmath>

using namespace std;

const int maxn = 1000005;

typedef long long LL;

int A[35][35];
int ans[35];

void gauss(int m,int n) //m个方程,n个变量
{
int i,j,k,r,u;
for(i=0,j=0;i<m&&j<n;j++){ //当前处理i个方程j个变量
r = i;
for(k = i;k < m;k++){
if(A[k][j]){
r = k;
break;
}
}
if(A[r][j]){
for(k = 0;k <= n;k++) swap(A[r][k],A[i][k]);
for(u = 0;u < m;u++){
if(u!=i && A[u][j]) for(k = i;k <= n;k++) A[u][k] ^= A[i][k];
}
i++;
}

}
for(int i=0;i<30;i++){
ans[i] = A[i][30];
}

}

int main()
{
int t;
scanf("%d",&t);
int cas = 0;
while(t--){
cas++;
memset(A,0,sizeof(A));
for(int i=0;i<30;i++){
scanf("%d",&A[i][30]);
//ans[i] = 0;
}
int x,xx,y,yy; //构造矩阵
for(int i=0;i<30;i++){
x = i/6;
y = i%6;
for(int j=0;j<30;j++){
xx = j/6;
yy = j%6;
if((abs(x - xx)+abs(y - yy)) <= 1) A[i][j] = 1;
else A[i][j] = 0;
}
}
gauss(30,30);
printf("PUZZLE #%d\n",cas);
for(int i=0;i<30;i++){
printf("%d",ans[i]);
if((i+1)%6==0) printf("\n");
else printf(" ");
}
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: