hduoj_2553(dfs, N皇后问题)

#include 
#include 
#include 

int x[11]; // 第i列是否已经被占用
int y[11]; // 第i行的皇后在哪一列
int table[11];
int n;
int sum;

void dfs(int k)
{
	// k代表着行
	if (k > n)
	{
		sum++;
		return;
	}
	
	int i, j;
	for (i = 1; i <= n; i++) // 列
	{
		if (x[i]) continue; // 该列已经有值

		for (j = 1; j < k; j++) // 
			if (abs(k - j) == abs(i - y[j])) break;

		if (j == k)
		{
			y[k] = i;
			x[i] = 1;
			dfs(k + 1);
			x[i] = 0;
		}
	}

}

int main()
{
	// 打表
	for (n = 1; n <= 10; n++)
	{
		memset(x, 0, sizeof(x));
		memset(y, 0, sizeof(y));

		sum = 0;
		dfs(1);
		table[n] = sum;
	}

	while (EOF != scanf("%d", &n) && n)
	{
		printf("%d\n", table[n]);
	}

	return 0;
}

你可能感兴趣的:(算法)