比赛 20120316 评测结果 AAAAAAATAT
题目名称 棋盘放車 最终得分 80
用户昵称 TBK 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-16 21:58:32
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <iomanip>
using namespace std;
int a,b,c,d,e,x[25][25];
long long s;
void DFS(int y)
{
	int i,j;
	if (y==a+1) 
	{
		s++;
		return;
	}
	for (i=1;i<=a;i++)
		if (x[y][i]==0)
		{
			for (j=1;j<=a;j++) 
				if (x[j][i]==0) x[j][i]=1;
			DFS(y+1);
			for (j=1;j<=a;j++) 
				if (x[j][i]==1) x[j][i]=0;
		}
}
int main(void)
{
	freopen ("examone.in","r",stdin);
	freopen ("examone.out","w",stdout);
	scanf("%d%d",&a,&b);
	if (b==0) 
	{
		s=1;
		for (c=1;c<=a;c++) s*=c;
		printf("%lld",s);
		return 0;
	}
	if (b==1) 
	{
		s=1;
		for (c=1;c<a;c++) s*=c;
		s*=(a-1);
		printf("%lld",s);
		return 0;
	}
	for (c=0;c<b;c++)
	{
		scanf("%d%d",&d,&e);
		x[d][e]=2;
	}
	DFS(1);
	printf("%lld",s);
	fclose(stdin);
	fclose(stdout);
	return 0;
}