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

14-n皇后

时间:2017-08-26 04:45:13      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:i++   end   检测   1年   冲突   水平   垂直   out   main   

/*题目内容:

 国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的
放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。
该题要求N皇后的放置结果共有多少种

输入描述

输入一个正整数N(N小于16)

输出描述

输出结果
输入样例
8

输出样例
92
*/

#include <iostream>
#include <algorithm>
using namespace std;
int hou[100]; //第i行 hou[i]列
int n = 0;
int c = 0;

int fun(int k){    //摆放第k行皇后,并且0到K-1行皇后已经放好了
    if(k == n){    //说明已经放好了n个皇后,则结束一种
//        for(int i = 0; i < n; i++)
//            cout << hou[i] + 1 << " ";
//        cout << endl;
        c++;
        return 1;
    }
    for(int i = 0; i < n; i++){ //检测每一列  //为什么是到N,不应是到八吗??
        int j = 0;
        for(j = 0; j < k; j++){ //一行一行的看是否与前面的皇后冲突
            if(hou[j] == i || abs(hou[j] - i) == abs(j - k))
                break;
        }
        if(j == k){
            hou[k] = i;
            fun(k+1);
        }
    }
}

int main(){
    cin >> n;

    fun(0);
    cout << c;    
    return 0;
}

14-n皇后

标签:i++   end   检测   1年   冲突   水平   垂直   out   main   

原文地址:http://www.cnblogs.com/zhumengdexiaobai/p/7429728.html

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