码迷,mamicode.com
首页 > 其他好文 > 详细

n皇后

时间:2019-04-21 11:38:10      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:str   span   set   讲解   arc   main   can   arch   void   

 

104.N皇后 (15分)
C时间限制:1 毫秒 | C内存限制:3000 Kb
题目内容:
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的
放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。
该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)

输出描述
输出结果

输入样例
8

输出样例
92

#include <stdio.h>
#include <string.h>
int c[20];//用来记录 a[i] = j 表示第i个皇后放在了 第 j 列
int count, n;
void search(int pos){
    if(pos == n+1){
        count++;
        return ;
    }
    //看放在第几列
    for(int i = 1; i <= n; i++){
        c[pos] = i;  //把第 pos 个皇后放在了第 i 列 
        //看看和前面的皇后是否有冲突
        bool flag = true;
        for(int j = 1; j < pos; j++){
            if(c[pos]==c[j] || pos-j==c[pos]-c[j] || pos-j == c[j]-c[pos]){
                flag = false;
                break;
            }
        } 
        if(flag) search(pos+1);
    } 
} 
int main(){
    memset(c, 0, sizeof c);
    count = 0;
    scanf("%d", &n);
    search(1);  //从第 1 行开始放第一个皇后 
    printf("%d\n", count);
    return 0;
}

 

n皇后

标签:str   span   set   讲解   arc   main   can   arch   void   

原文地址:https://www.cnblogs.com/DDiamondd/p/10744256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!