?? 4613204_wa.cpp
字號:
#include<iostream>
#include<string>
using namespace std;
char inp;
bool input[4][4];
bool now[4][4];
//bool sdo[4][4];
int jdo[4][4];
int tmin=100;
int bu=0;
bool ok;
void press(int i,int j)
{
now[i][j]=!now[i][j];
if(i>0) now[i-1][j]=!now[i-1][j];
if(i<3) now[i+1][j]=!now[i+1][j];
if(j>0) now[i][j-1]=!now[i][j-1];
if(j<3) now[i][j+1]=!now[i][j+1];
}
void copy()
{
for(int count=0;count<4;count++)
{
for(int count1=0;count1<4;count1++)
{
now[count][count1]=input[count][count1];
}
}
}
void hang(int row,bool goal)
{
switch(row)
{
case 0:
{
for(int count=0;count<=15;count++)
{
bu=0;
copy();
jdo[row][0]=count/8;if(jdo[row][0]==1) {press(row,0);bu++;}
jdo[row][1]=count%8/4;if(jdo[row][1]==1) {press(row,1);bu++;}
jdo[row][2]=count%4/2;if(jdo[row][2]==1) {press(row,2);bu++;}
jdo[row][3]=count%2;if(jdo[row][3]==1) {press(row,3);bu++;}
hang(row+1,goal);
}
break;
}
case 1:
case 2:
case 3:
{
if(now[row-1][0]!=goal) {jdo[row][0]=1;press(row,0);bu++;}
else {jdo[row][0]=0;}
if(now[row-1][1]!=goal) {jdo[row][1]=1;press(row,1);bu++;}
else {jdo[row][1]=0;}
if(now[row-1][2]!=goal) {jdo[row][2]=1;press(row,2);bu++;}
else {jdo[row][2]=0;}
if(now[row-1][3]!=goal) {jdo[row][3]=1;press(row,3);bu++;}
else {jdo[row][3]=0;}
if(row!=3)hang(row+1,goal);
else
{
if(now[3][0]==goal&&
now[3][1]==goal&&
now[3][2]==goal&&
now[3][3]==goal
)
{
ok=true;
tmin=bu<tmin?bu:tmin;
}
}
}
}
}
void slove(bool goal)
{
hang(0,goal);
}
int main()
{
string ss;
while(cin>>ss)
{
tmin=100;
ok=false;
for(int count=0;count<3;count++)
{
if(ss[count]=='b') input[0][count]=true;
else input[0][count]=false;
}
for(int i=1;i<4;i++)
{
cin>>ss;
for(int j=0;j<4;j++)
{
if(ss[j]=='b') input[i][j]=true;
else input[i][j]=false;
}
}
slove(true);
slove(false);
if(ok==true)cout<<tmin<<endl;
else cout<<"Impossible"<<endl;
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -