比赛 NOIP_1 评测结果 TTTTT
题目名称 画海岛地图 最终得分 0
用户昵称 BYVoid 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-09-03 22:03:31
显示代码纯文本
#include <iostream>
#include <fstream>

using namespace std;

ifstream fi("island.in");
ofstream fo("island.out");

typedef struct
{
	int cnt;
	int is[5];
}island;

int N,anscnt=0;
island line[9],row[9];
bool map[9][9];


void init()
{
	int i,a;
	fi >> N;
	for (i=1;i<=N;i++)
	{
		line[i].cnt=0;
		a=1;
		while (a)
		{
			fi >> a;
			if (a)
				line[i].is[ ++line[i].cnt ]=a;
		}
	}
	for (i=1;i<=N;i++)
	{
		row[i].cnt=0;
		a=1;
		while (a)
		{
			fi >> a;
			if (a)
				row[i].is[ ++row[i].cnt ]=a;
		}
	}
}

void print()
{
	int i,j;
	anscnt++;
	fo << anscnt << endl;
	for (i=1;i<=N;i++)
	{
		for (j=1;j<=N;j++)
			fo << (map[i][j]?'*':' ');
		fo << endl;
	}
}


void judge()
{
	int i,j=1,k=0,w;
	for (w=1;w<=N;w++)
	{
		for (i=1;i<=N;i++)
		{
			if (map[i][w])
			{
				k++;
				if (k>row[w].is[j])
					return;
			}
			else
			{
				if (k==row[w].is[j])
				{
					j++;
					k=0;
				}
			}
		}
		if (j!=row[w].cnt)
			return;
	}
	print();
}

void go(int x,int y)
{
	map[x][y]=true;
	if (y+1<=N)
		go(x,y+1);
	else if(x+1<=N)
		go(x+1,1);
	else
		judge();
	map[x][y]=false;
	if (y+1<=N)
		go(x,y+1);
	else if(x+1<=N)
		go(x+1,1);
	else
		judge();
}

int main()
{
	for (;;);
	init();
	go(1,1);
	fi.close();
	fo.close();
	return 0;
}