zoukankan      html  css  js  c++  java
  • hdu 2553 N皇后

    题目传送门

    #include<bits/stdc++.h>
    using namespace std;
    inline int read()
    {
    	int x=0,k=1;char c=getchar();
    	while(c<'0' || c>'9'){if(c=='-') k=0;c=getchar();}
    	while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    	return k?x:-x;
    }
    int m[20],k,ans[20];
    bool check(int x)
    {
    	for(int i=x-1;i>=1;i--) if(m[i]==m[x] || abs(m[i]-m[x])==abs(i-x)) return 0;//是否在同行或同列或同斜行 
    	return 1;
    }
    void dfs(int x)
    {
    	if(x==k)//如果到了该到的数量 
    	{
    		ans[k]++;//当前答案加 1 
    		return;
    	}
    	for(int i=1;i<=k;i++)//从一循环至最多皇后数 
    	{
    		m[x+1]=i;//标记 
    		if(check(x+1)) dfs(x+1);//继续往后递归 
    	}
    }
    int n;
    int main()
    {
    	for(int i=1;i<=10;i++)//打表 
    	{
    		k=i;//将 k 赋值为 i 也就是最多皇后数 
    		dfs(0);//从 0 开始递归 
    	}
    	while(n=read())//输入 
    	{
    		if(!n) break;
    		printf("%d
    ",ans[n]);//输出 
    	}
    	return 0;
    }
    
  • 相关阅读:
    C++防止头文件反复包括
    yppasswd, ypchfn, ypchsh
    yes
    Yacc
    xxd
    xpdf -Portable Document Format(PDF)文件阅读器
    xinetd
    xargs
    x25, PF_X25
    write -在一个文件描述符上执行写操作
  • 原文地址:https://www.cnblogs.com/ForeverOIer/p/12254109.html
Copyright © 2011-2022 走看看