比赛 20140713下午练习 评测结果 AAAAAAAAAA
题目名称 跳棋的挑战 最终得分 100
用户昵称 努力吧 运行时间 1.612 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-07-13 16:16:33
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("checker.in");
ofstream fo("checker.out");
int a[30];
int n,o=0;
void queen(unsigned row,unsigned ld,unsigned lr,unsigned i);
void pr(int r);
int main()
{
	fi>>n;
	queen(0,0,0,0);
	fo<<o<<endl;
	return 0;
}
void queen(unsigned row,unsigned ld,unsigned rd,unsigned i)
{
	if(row==(1<<n)-1)
	{
		pr(i);
	}
	else
	{
		unsigned pos=~(row|ld|rd)&((1<<n)-1);
		while(pos!=0)
		{
			unsigned p=pos&(-pos);
			int s=0;
			unsigned pl=p;
			while(pl!=1)
			{
				s++;
				pl=pl>>1;
			}
			a[i]=s+1;
			pos=pos-p;
			queen(row+p,(ld+p)<<1,(rd+p)>>1,i+1);
		}
	}
}
void pr(int r)
{
	o++;
	if(o<=3)
	{
	    for(int i=0;i<=r-1;i++)
			if(i!=r-1)
		        fo<<a[i]<<" ";
			else
				fo<<a[i];
		fo<<endl;
	}
}