现在的位置: 首页 > 综合 > 正文

poj 2965 The Pilots Brothers’ refrigerator

2018年04月29日 ⁄ 综合 ⁄ 共 856字 ⁄ 字号 评论关闭

一个与poj  1753 类似的题目不过是将改四个方向的状态变成了改变所要求的行和列的状态。

#include<stdio.h>
#include<string.h>
char s[5][5];
int e[5][5],b[5][5],flag,step;

void qq(int o,int p)
{
	int i;
	b[o][p]=!b[o][p];
	for(i=1;i<5;i++)
	{
		if(b[o][i]==1)
			b[o][i]=0;
		else
			b[o][i]=1;
	}
	for(i=1;i<5;i++)
	{
		if(b[i][p]==1)
			b[i][p]=0;
		else
			b[i][p]=1;
	}
}

int yy()
{
	int i,j;
	for(i=1;i<5;i++)
	{
		for(j=1;j<5;j++)
		{
			if(b[i][j]!=1)
				return 0;
		}
	}
	return 1;
}

void show(int r,int t,int y)
{
	int d;
	if(r==step)
	{
		d=yy();
		if(d)
			flag=1;
		return ;
	}
	if(flag||t==5)
		return ;
	qq(t,y);
	e[r][0]=t;
	e[r][1]=y;
	if(y<4)
		show(r+1,t,y+1);
	else
		show(r+1,t+1,1);
	qq(t,y);
	if(y<4)
		show(r,t,y+1);
	else
		show(r,t+1,1);
}

int main()
{
	int i,j;
	memset(b,0,sizeof(b));
	for(i=1;i<5;i++)
	{
		for(j=1;j<5;j++)
		{
		   scanf("%c",&s[i][j]);
		   if(s[i][j]=='-')
			   b[i][j]=1;
		}
		getchar();
	}
	memset(e,0,sizeof(e));
	for(step=0;step<=16;step++)
	{
		show(0,1,1);
		if(flag)
			break;
	}
	printf("%d\n",step);
	for(i=0;i<step;i++)
	{
		printf("%d %d\n",e[i][0],e[i][1]);
	}
	return 0;
}

抱歉!评论已关闭.