#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 65536
int data[16];
char inputline[6];
void input(int *data)
{
int line=4;
char inputline[6];
int count=0;
while(line--)
{
int i;
scanf("%s",inputline);
for(i=0;i<4;i++)
if(inputline[i]=='+')
data[count++]=1;
else
data[count++]=0;
}
/*int i;
for(i=0;i<16;i++)
printf("%d",data[i]);*/
}
void change_element(int line,int row,int *c)
{
int j=0;
int linenumber=(line-1)*4;
for(j=0;j<4;j++)
{
c[j*4+row-1]=!(c[j*4+row-1]);
c[j+linenumber]=!(c[j+linenumber]);
}
}
int all_open(int *day)
{
int i=0;
for(;i<15;i++)
if(day[i]==1)
return 0;
return 1;
}
void printl(int *a,int len)
{
int i;
for(i=len;i>0;i--)
{
int number=a[i-1]+1;
int row=number%4;
if(row==0)
row=4;
int line=(number-row)/4+1;
printf("%d %d\n",line,row);
}
}
void chongfu(int *data,int start,int *flag,int count,int const NUM,int *result)
{
int i;
for(i=start;i<=16-count;i++)
result[count-1]=i;
if(count-1==0)
{
int *new_data=(int *)malloc(sizeof(int)*16);
//strcpy(new_data,data);²»¿ÉÒÔÕâÑùÓÃÒòΪstrcpy¸´ÖƵÄÊÇ×Ö·û´®
for(i=0;i<16;i++)
{
new_data[i]=data[i];
}
for(i=0;i<NUM;i++)
{
int num=result[i]+1;
int x=num/4,y=num%4;
change_element(x,y,new_data);
}
if(all_open(new_data))
{
*flag=1;
free(new_data);
return;
}
free(new_data);
}
else
{
chongfu(data,start+1,flag,count-1,NUM,result);
}
}
void bfs(int *data)
{
if(all_open(data))
printf("%d\n",0);
else
{
int flag=0;
int count;
for(count=1;count<17;count++)
{
int start=0;
int *result=(int *)malloc(sizeof(int)*count);
chongfu(data,start,&flag,count,count,result);
if(flag)
{
printf("%d\n",count);
printl(result,count);
free(result);
break;
}
free(result);
}
}
}
int main(void)
{
input(data);
bfs(data);
return 0;
}
poj2965自己写的
最新推荐文章于 2019-07-15 20:39:27 发布