| ||||||||||
| 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 | |||||||||
为何不过呢?c0n是改变颜色用的
几乎什么都加了,为何A不掉呢?
/*unsolved*/
#include<stdio.h>
#include<math.h>
#include<limits.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
#define NDEBUG -1
#include<assert.h>
#define c0n(a,i) a=(a>>(i)&1==1)?(a&~(1<<(i))):(a|(1<<(i)))
char map[16];
bool b[65536];
long st;
long ed[2];
long q[65536];
long dep[65536];
long h,t;
int bfs()
{
int i,sta;
h=0;t=1;
q[0]=st;
dep[0]=0;
while(h<t){
for(i=0;i<16;i++){
sta=q[h];
if(i%4==0)c0n(sta,i+1);
else if(i%4==3)c0n(sta,i-1);
else{
c0n(sta,i+1);
c0n(sta,i-1);
}
if(i>=0&&i<4)c0n(sta,i+4);
else if(i>=12&&i<16)c0n(sta,i-4);
else{
c0n(sta,i+4);
c0n(sta,i-4);
}
sta=c0n(sta,i);
if(!b[sta]){
b[sta]=true;
q[t]=sta;
dep[t]=dep[h]+1;
if(sta==ed[0]||sta==ed[1]){printf("%ld\n",dep[t]);return 0;}
t++;
}
}
h++;
}
return 1;
}
int main(void)
{
int i,j;
//freopen("t2","r",stdin);
//freopen("t2o","w",stdout);
memset(q,0,sizeof(q));
memset(dep,0,sizeof(dep));
for(i=0;i<16;i++){
scanf("%c",&map[i]);
if(i%4==3)scanf("\n");
if(map[i]=='b')st=st&~(1<<i);
else st=st|(1<<i);
}
ed[0]=0;
ed[1]=65535;
b[st]=true;
if(st==ed[0]||st==ed[1])printf("0\n");
if(bfs())printf("Impossibe\n");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator