| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
第一次贴代码,大神勿喷#include<iostream>
#include<stdio.h>
#include<deque>
#define N 65533+3
using namespace std;
int a[N];
int c[16][4]={
{1,4,-1,-1},
{0,2,5,-1},
{1,6,3,-1},
{2,7,-1,-1},
{0,5,8,-1},
{1,4,6,9},
{2,5,7,10},
{3,6,11,-1},
{4,9,12,-1},
{5,8,10,13},
{6,9,11,14},
{7,10,15,-1},
{8,13,-1,-1},
{9,12,14,-1},
{13,10,15,-1},
{11,14,-1,-1}
};
unsigned int get_start(int *A)
{
unsigned int x=0;
for(int i=0;i<16;i++)
{
if(A[i])
{
x|=(1<<i);
}
}
return x;
}
int start[16];
int main()
{
//freopen("/home/zlq/easy_acming/in","r",stdin);
for(int i=0;i<N;i++){a[i]=-1;}//全部设置成-1;
string tmp;
for(int line=0;line<4;line++)
{
cin>>tmp;
for(int i=0;i<4;i++)
{
if(tmp[i]=='b')
{
start[line*4+i]=1;
}
}
}
int begin=get_start(start);
a[begin]=0;
deque<unsigned int> d;
d.push_back(begin);
int now;
int flag=0;
while(d.empty()==false)
{
now=d.front();
d.pop_front();
if(now==65535||now==0){flag=1;break;}
else
{
for(int i=0;i<16;i++)//一共可以有16种选择..16中变换
{
unsigned int gen=now;
gen=gen^(1<<i);
for(int j=0;j<4;j++)//每种变换,将其中的4位进行取反操作
{
if(c[i][j]!=-1)
gen=gen^(1<<c[i][j]);
}
if(a[gen]==-1)
{
a[gen]=a[now]+1;
d.push_back(gen);
}
}
}
}
if(flag==1)
cout<<a[now]<<endl;
else
cout<<"Impossible"<<endl;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator