POJ 1222 Gauss消元法解抑または方程式
7924 ワード
第1回はどのようにガウス消元法で方程式のグループを解くかを学んで、思想は実はとても簡単で、方法は以下のリンクを見ることができます:http://blog.csdn.net/zhuichao001/article/details/5440843
このような考えがあって、いくつかの簡単なトランプ問題も手がかりがあって、また前に1回からトランプをひっくり返してマンハッタンの距離kの点に影響する問題をしたことを覚えていて、今から見れば構想があるように見えますが、それは900点のようで、やりにくいですね.自分で振り返って考えてみましょう.まず水問題のコードを貼ってください.
このような考えがあって、いくつかの簡単なトランプ問題も手がかりがあって、また前に1回からトランプをひっくり返してマンハッタンの距離kの点に影響する問題をしたことを覚えていて、今から見れば構想があるように見えますが、それは900点のようで、やりにくいですね.自分で振り返って考えてみましょう.まず水問題のコードを貼ってください.
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int m[10][10];
int ans[10][10];
int eq[40][40];
void gauss(int a[40][40])
{
for(int i=0;i<30;++i){
int k=i;
for(;k<30;++k){
if(a[k][i]!=0){
break;
}
}
for(int j=0;j<=30;++j){
swap(a[i][j],a[k][j]);
}
for(int j=0;j<30;++j){
if(i!=j&&a[j][i]){
for(int k=0;k<=30;++k){
a[j][k]=a[i][k]^a[j][k];
}
}
}
}
for(int i=0;i<30;++i){
ans[i/6][i%6]=eq[i][30];
}
}
int main()
{
int T;cin>>T;int ca=0;
while(T--)
{
memset(eq,0,sizeof(eq));
for(int i=0;i<5;++i){
for(int j=0;j<6;++j){
scanf("%d",&m[i][j]);
eq[i*6+j][30]=m[i][j];
eq[i*6+j][i*6+j]=1;
if(j-1>=0) eq[i*6+j][i*6+j-1]=1;
if(j+1<6) eq[i*6+j][i*6+j+1]=1;
if(i*6+j-6>=0) eq[i*6+j][i*6+j-6]=1;
if(i*6+j+6<=29) eq[i*6+j][i*6+j+6]=1;
}
}
gauss(eq);
printf("PUZZLE #%d
",++ca);
for(int i=0;i<5;++i){
printf("%d",ans[i][0]);
for(int j=1;j<6;++j){
printf(" %d",ans[i][j]);
}
puts("");
}
}
return 0;
}