N 後問題

利用回溯思想,主要是皇后之間碰撞條件的檢測,其他的就是基本的搜索了

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
int n;
int num;
int a[13][13];
int c[13];

bool vis[3][30];
void search(int cur)
{
	int i,j;
	if(cur == n)
	{
		num++;
		return;
	}
	else for(i=0; i<n; i++)
	{
		if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
		{
			vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = true;
			search(cur+1);
			vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = false;
		}
	}
}
int main()
{
	while(scanf("%d", &n) != EOF)
	{
		num = 0;
		memset(vis,false,sizeof(vis));
		search(0);
		printf("%d\n",num);
	}

system("pause");
return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章