关闭

【八皇后】问题

标签: 八皇后回溯算法
189人阅读 评论(0) 收藏 举报
分类:

算法

回溯的思想

代码

来源于《算法竞赛入门经典》
#include<iostream>
using namespace std;

int n, tot = 0, c[20];
void search(int cur){
    if (cur>n)tot++;//递归边界,只要走到这里,所有皇后必然不冲突
    else for (int i = 1; i <= n; i++){
        int ok = 1;
        c[cur] = i;//尝试把第cur行的皇后放在第i列
        for (int j = 1; 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(){
    cin >> n;
    search(1);
    cout << tot << endl;
    return 0;
}

0
0
查看评论

八皇后问题详解(最短代码)

八皇后问题算法分析: 分析1:八皇后由一个64格的方块组成,那么把八个皇后放入不考虑其他情况利用穷举法,有8^64种 可能。 分析2:显然任意一行有且仅有1个皇后,使用数组queen[0->7]表示第i行的皇后位于哪一列。 对于“1->8”这八个字符,调用全排列问题(有8!种情况...
  • dreamzuora
  • dreamzuora
  • 2016-10-11 20:28
  • 1742

【人工智能】八皇后问题-启发式求解

摘要八皇后问题是回溯算法的典型案例,在回溯法中,常常是盲目搜索,耗费过多的搜索时间。在本次实验中,使用了启发式搜索,搜索时不是任取一个分支,而是选择最佳的分支往下搜索。通过定义状态空间、操作规则、搜索策略,我们可以清晰快速地得到原问题的一个解。导言八皇后问题是一个以国际象棋为背景的问题:如何能够在 ...
  • jiange_zh
  • jiange_zh
  • 2015-10-11 11:28
  • 2106

数据结构应用案例——栈结构用于8皇后问题的回溯求解

【说明】本文来自由周世平老师主编的《C语言程序设计》教材。我作为参编人员执笔了第7、8章。“第8章 问题求解与算法”中“8.6.1 回溯法”以8皇后问题的求解为例,介绍了回溯法的解题过程。这个解决方案中用到了“栈”,引用至此,作为栈应用的例子。需要说明的是,教材面向程序设计初学者,并全文中并未提出过...
  • sxhelijian
  • sxhelijian
  • 2015-10-05 15:21
  • 5760

八皇后问题(典型的递归回溯)

八皇后 : 这个代码只是输出一共有多少种摆放的个数。如果想要输出他摆放的不同方法 只需要在递归出口的时候用两个for循环输出棋盘即可。 目的在于每行,每列,以及对角线上都只能放置一个皇后,所以这里需要用到标记 目的在于我放置之后不能够再其对角线上这一行这一列再放。 首先定义一个10...
  • lp15203883326
  • lp15203883326
  • 2016-09-07 20:27
  • 983

八皇后 答案

我使用的穷举法 java写的 class MyQueen{ public static void main(String[] args){  int count=0;  for(int row1=1; row1  ...
  • sand_of_Sitsang
  • sand_of_Sitsang
  • 2007-01-15 16:26
  • 1484

算法竞赛入门经典第七章暴力求解法——回溯法(1.八皇后问题)

学习紫书从此节开始突然觉得难度提升了一个等级,分析一个程序需要花不少时间(因为自己太渣)。“回溯法”这个算法是非常重要的甚至是搞算法的必须要掌握的一个高级算法,它的技巧就是“碰到就回解”。当然,它还是需要使用“递归”。那我就跟着紫书的顺序继续整理下去吧!-1.八皇后问题这个问题,呃,熟悉到简直不能再...
  • karry_zzj
  • karry_zzj
  • 2017-03-31 00:12
  • 546

字符串数组的全排列到八皇后问题详解

八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了...
  • qq_27291877
  • qq_27291877
  • 2015-07-14 16:29
  • 267

利用全排列八皇后问题的一种解法

转载自: http://zhedahht.blog.163.com/blog/static/2541117420114331616329/      题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一...
  • tangaowen
  • tangaowen
  • 2016-06-09 15:08
  • 1351

用Java解决八皇后问题

class Queen { static final int QUEEN_MAX = 8; // 皇后的数量 int[][] Queencount = new int[QUEEN_MAX][QUEEN_MAX];// 分配8X8的数组,充当棋盘,存放皇后 int resultCount...
  • mw08091020
  • mw08091020
  • 2012-09-25 20:17
  • 6580

运用全排列的方法解决八皇后问题

运用全排列的方法解决八皇后问题,可以分为两部分:全排列和八皇后,下面我将分开说明两个步骤。 首先说明全排列: 第一步:就是把皇后按照0到8编号,然后对八个皇后进行全排列,一共有40320种排列方式。 第二步:将全排列的40320种排列结果进行筛选,选出满足八皇后问题的结果,共有92种结果。 先说一下...
  • liyuxing6639801
  • liyuxing6639801
  • 2017-07-26 18:01
  • 251
    个人资料
    • 访问:16122次
    • 积分:537
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:15篇
    • 译文:0篇
    • 评论:4条
    最新评论