zoukankan      html  css  js  c++  java
  • N皇后摆放问题

    Description

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

    Input

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

    Output

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

    Sample Input

    1
    8
    5
    0
     

    Sample Output

    1
    92
    10
     
     
    解题思路:用DFS。  一行一行的摆放,当摆放有合理位置就递归进行下一行的摆放,直到最后一行。当没有合理位置,就选择其他列摆放。一直这样递归下去。直到找完所有的摆放方法。
    程序代码:
    #include <stdio.h>
    int tot,n,N,m,c[11],b[11];
    void search(int cur)
    {
        if(cur==n)
            tot++;
        else for(int i=0; i<n; i++)
            {
                int ok=1;
                c[cur]=i;
                for(int j=0; j<cur; j++)
                    if(c[cur]==c[j]||cur-c[cur]==j-c[j]||cur+c[cur]==j+c[j])
                    {
                        ok=0;
                        break;
                    }
                if(ok)
                    search(cur+1);
            }
    }
    
    int main()
    {
        for(n=1; n<=10; n++)
        {
            tot=0;
            search(0);
            b[n]=tot;
        }
        while(scanf("%d",&N)==1&&N)
            printf("%d
    ",b[N]);
    
    
        return 0;
    }
     
     
  • 相关阅读:
    tap事件的原理详解
    获取地理位置
    获取高度
    JSON字符串与JSON对象的区别
    zepto方法
    javascript 中 click 和onclick有什么区别呢
    oninput,onpropertychange,onchange的用法和区别
    js实时监听input中值得变化
    sql lock
    数据库SQL优化大总结
  • 原文地址:https://www.cnblogs.com/yilihua/p/4678471.html
Copyright © 2011-2022 走看看