poj 1222
高斯消元
代码:
#include<iostream>
#include<fstream>
using namespace std;
int move[5][2]={0,0,0,1,0,-1,1,0,-1,0};
int n,m;
int map[31][31];
int a[31][31];
int x[31];
void solve(){
int i,j,k,s,t;
j=0;
for(i=0;i<30&&j<30;i++,j++)
{
for(k=i;k<30;k++)
if(a[k][j]==1)
break;
if(k==30)
{
i--;
continue;
}
if(k!=i)
{
for(s=j;s<31;s++)
{
swap(a[k][s],a[i][s]);
}
}
for(k=i+1;k<30;k++)
if(a[k][j]==1)
{
for(s=j;s<31;s++)
a[k][s]=a[k][s]^a[i][s];
}
}
memset(x,0,sizeof(x));
for(i=k-1;i>=0;i--)
{
for(j=i+1;j<30;j++)
a[i][30]^=(a[i][j]&&x[j]);
x[i]=a[i][30];
}
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
cout<<x[i*6+j]<<' ';
cout<<endl;
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t,cas1;
int cas;
for(i=0;i<5;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
s=move[k][0]+i;
t=move[k][1]+j;
if(s>=0&&s<5&&t>=0&&t<6)
map[i*6+j][s*6+t]=1;
}
}
cin>>cas;
for(cas1=1;cas1<=cas;cas1++)
{
cout<<"PUZZLE #"<<cas1<<endl;
for(i=0;i<5;i++)
for(j=0;j<6;j++)
{
cin>>map[i*6+j][30];
}
for(i=0;i<31;i++)
for(j=0;j<31;j++)
a[i][j]=map[i][j];
solve();
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号