比赛 20100927 评测结果 AAAAAAATAA
题目名称 魔术数字游戏 最终得分 90
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-27 20:30:46
显示代码纯文本
#include <fstream>

#define I_F "magic.in"
#define O_F "magic.out"

using namespace std;

short map[5][5];
bool flag[17];
short x,y;

ofstream fout(O_F);

void Input();
void Output();
bool Pd(short m, short n, short x);
void Search(short m, short n);

int main()
{
	Input();
	Search(1,1);
	fout.close();
}

void Input()
{
	ifstream fin(I_F);
	fin>>x>>y;
	fin.close();
	map[x][y]=1;
}

void Output()
{
	short i,j;
	for (i=1; i<=4; fout<<map[i++][4]<<'\n')
		for (j=1; j<4; fout<<map[i][j++]<<' ');
	fout<<'\n';
}

bool Pd(short m, short n, short x)
{
	if ((n==4)&&(map[m][1]+map[m][2]+map[m][3]+x!=34))
		return false;
	if ((m==4)&&(map[1][n]+map[2][n]+map[3][n]+x!=34))
		return false;
	if ((m==2)&&(n==2)&&(map[1][1]+map[1][2]+map[2][1]+x!=34))
		return false;
	if ((m==2)&&(n==4)&&(map[1][3]+map[1][4]+map[2][3]+x!=34))
		return false;
	if ((m==3)&&(n==3)&&(map[2][2]+map[2][3]+map[3][2]+x!=34))
		return false;
	if ((m==4)&&(n==2)&&(map[3][1]+map[3][2]+map[4][1]+x!=34))
		return false;
	if ((m==4)&&(n==4)&&(map[3][3]+map[3][4]+map[4][3]+x!=34))
		return false;
	if ((m==4)&&(n==1)&&(map[1][4]+map[2][3]+map[3][2]+x!=34))
		return false;
	if ((m==4)&&(n==4)&&(map[1][1]+map[2][2]+map[3][3]+x!=34))
		return false;
	if ((m==4)&&(n==4)&&(map[1][1]+map[1][4]+map[4][1]+x!=34))
		return false;
	return true;
}

void Search(short m, short n)
{
	if (m<5)
	{
		if (map[m][n]==1)
			Search(m+n/4,n%4+1);
		else
			for (short i=2; i<17; i++)
				if ((!flag[i])&&(Pd(m,n,i)))
				{
					flag[i]=true;
					map[m][n]=i;
					Search(m+n/4,n%4+1);
					flag[i]=false;
				}
	}
	else
		Output();
}