N皇后问题

来源:互联网 发布:怎么申请淘宝卖家 编辑:程序博客网 时间:2024/06/05 23:42

N皇后问题

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 18   Accepted Submission(s) : 9

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

Input

共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

Output

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

Sample Input

1850

Sample Output

192

10

#include <stdio.h>#include <iostream>#include <cmath>using namespace std;int sum,x[11];int n;bool place(int k){    for(int i=1;i<k;i++)    {        if(abs(x[i]-x[k])==abs(k-i)||x[i]==x[k])        {            return false;        }    }    return true;}void backtrack(int k){    if(k>n)        sum++;    else    {        for(int i=1;i<=n;i++)        {            x[k]=i;            if(place(k))            {                backtrack(k+1);            }        }    }}int main(){    int ans[11];    for(n=1;n<11;n++)    {       sum=0;       backtrack(1);       ans[n]=sum;    }    while(scanf("%d",&n)!=EOF&&n)    {        printf("%d",ans[n]);        cout<<endl;    }    return 0;}


0 0
原创粉丝点击