HDU 2553

八皇后问题的变体,N皇后问题,dfs+回溯即可

真正实现的时候还是遇到了点问题,递归式边界返回条件,一定要等到row已经到N之外才可以,因为这才意味着第N行的点也通过了考验,搜索到第N行并不意味着结束,还有相当关键的临门一脚(感觉对这个问题还有代码是一个双关)

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <map>
#include <set>
using namespace std;

const int maxn= 15;

int n;
int col[maxn], ans[maxn];

int DFS(int row)
{
	if (row> n){
		return 1;
	}
	int ans= 0;
	for (int i= 1; i<= n; ++i){
		int flag= 1;
		for (int j= 1; j< row; ++j){
			if (col[j]== i || row+i == j+col[j] || row-i == j-col[j]){
				flag= 0;
				break;
			}
		}
		if (flag){
			col[row]= i;
			ans+= DFS(row+1);
		}
	}

	return ans;
}

int main(int argc, char const *argv[])
{
	for (int i= 1; i<= 10; ++i){
		n= i;
		ans[i]= DFS(1);
	}
	while (~scanf("%d", &n) && n){
		printf("%d
", ans[n]);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/Idi0t-N3/p/14695722.html