#include <stdio.h>
#include <math.h>
char data[17],result[17];
void inputdata(char *data);
int changeData(char *data);
void charChange(char *data,int i);
int panduan(char *data,int number);
void reverse(char *data,char *result,int i);
void chuli(const int number,int start,char *data,const int NUM,int *f);
int main(void)
{
int min=0;
inputdata(data);
if((min=changeData(data))!=17)
printf("%d\n",min);
else
puts("Impossible\n");
return 0;
}
void inputdata(char *data)
{
int i;
for(i=0;i<16;i++)
while((data[i]=getchar())==' '||data[i]=='\n'||data[i]=='\t');
}
int changeData(char *data)
{
int number;
if(panduan(data,0)==0)
{
return 0;
}
for(number=1;number<17;number++){
int start=0,NUM=number,last=17;
chuli(number,start,data,NUM,&last);
if(last==NUM)
return NUM;
}
return 17;
}
void chuli(int number,int start,char *data,const int NUM,int *f)
{
int i,min;
static int ok=0;
for(i=start;i<=16-number;i++)
{
// printf("i=%d\n",i);
// printf("i=%d start=%d number=%d\n",i,start,number);
result[number-1]=i;
printf("i=%d result[%d]=%d\n",i,number-1,result[number-1]);
if(number-1==0)
{
//printf("if(number-1==0)\ni=%d",i);
int j;
for(j=NUM;j>0;j--)
reverse(data,result,j-1);
*f=panduan(data,number);
printf("*f=%d",*f);
if(*f!=17)//取它时候必须取它的指向的对象
{
printf("1111111111111111\n");
ok=1;
}else{
for(j=NUM;j>0;j--)
reverse(data,result,j-1);
}
if(ok==1)
{//在下面用if语句+break即可
break;
printf("break;\n");
}
}else{
chuli(number-1,start+1,data,NUM,f);
printf("xunhuan\n");
}
}
}
int panduan(char *data,int number)
{
char *p=data;
int i=0;
while((*(p+i)==*data)&&(i<=15))
{
i++;
}
if(i==16)
return number;
return 17;
}
void reverse(char *data,char *result,int i)
{
i=result[i];//注意i要转化
printf("i=%d",i);
charChange(data,i);//自身也要发生变化
int line,row;
line=i/4;
row=i%4;
if(line+1<4)
charChange(data,i+4);
if(line-1>=0)
charChange(data,i-4);
if(row+1<4)
charChange(data,i+1);
if(row-1>=0)
charChange(data,i-1);
}
void charChange(char *data,int i)
{
if(data[i]=='b')
data[i]='w';
else
data[i]='b';
}
poj1753(自己写的)明天等待试验
最新推荐文章于 2022-04-02 09:08:26 发布