• 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;
    }
    
  • 相关阅读:
    openmp
    opencv 读写矩阵
    string to const char*
    c++ string to number
    HDU 1520 Anniversary Party
    ZOJ 1003 Crashing Balloon
    HDU 4171 Paper Route
    ZOJ 2067 White Rectangles
    TOJ 1690 Cow Sorting (置换群)
    TOJ 2814 Light Bulb
  • 原文地址:https://www.cnblogs.com/Idi0t-N3/p/14695722.html
Copyright © 2020-2023  润新知