| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3536 人关注过本帖
标题:八皇后(回朔法)
只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
 问题点数:0 回复次数:9 
八皇后(回朔法)
#include <iostream>
# include <math.h>
using namespace std;
int total = 0;      //方案计数
void main(){  
  int queen[8];
  int i, j, k;
  for (i=0;i<8;i++)  queen[i] = 0;           //八皇后全放在第0列
  for (i=1;;){                               //首先安放第0行皇后
    if(queen[i]<8){                          //皇后还可调整
      k=0;                                   //检查与第k个皇后是否互相攻击
      while(k<i&&abs(queen[k]-queen[i])&&(abs(queen[k]-queen[i])-abs(k-i)))  k++;
      if (k<=i-1){                           //与第k个皇后互相攻击
        queen[i]++;                          //第i个皇后右移一列,重测
        continue;
      }
      i++;                                   //无冲突,安置下一行皇后
      if(i<8) continue;
      for(j=0;j<8;j++) cout<<queen[j];       //已完成,输出结果      
      cout<<"  ";
   total++;                               //方案数加1
      if(total%5==0) cout<<endl;
      queen[7]++;                            // 将第7个皇后右移一列,前7个不动
      i=7;                           //此处是制造机会,如不成功则回溯,关键一步
    }
    else                                     //当前行皇后无法安置,回溯
    {
      queen[i]=0;                            //当前行皇后回归0列
      i--;                                   //回溯到前一行皇后
      if(i<0){                               //回溯到数组0行之前,结束
        cout<<" 总数:"<<total<<endl;
        return;
      }
      else queen[i]++;             //前一行皇后右移一列
    }
  }  
}
搜索更多相关主题的帖子: 皇后 queen int abs include 
2005-05-12 07:32
指向指针的指针
Rank: 1
等 级:新手上路
帖 子:339
专家分:0
注 册:2004-8-8
收藏
得分:0 
谁能详细讲讲回溯法。

[此贴子已经被作者于2005-5-13 13:09:47编辑过]



/sign.png" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www./sign.png');}" onmousewheel="return imgzoom(this);" alt="" />
2005-05-12 12:54
jiansilang
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2004-5-9
收藏
得分:0 
真不易啊,好不容易看到一个我能看得懂的程序,谢谢楼主.
可是,这是程序的目的是什么啊?
谁能给解释一下什么是"八皇后",谢谢.!
2005-05-13 07:41
流浪者
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2005-4-24
收藏
得分:0 
回溯法????

我因我之为我而不同凡响~~~
2005-05-13 18:24
tary
Rank: 1
等 级:新手上路
帖 子:780
专家分:0
注 册:2004-10-5
收藏
得分:0 
不错,,,, 这是个经典例子.

┌→¨ ≮我可以学会对你很冷落≯¨←┐ │  <却学不╓══╦══╖会将爱> │ │¨←┐ ╭╩╮哭‖哭╭╩╮ ┌→¨│ └──┘收 ╲╱ ◇‖◇ ╲╱回└──┘
2005-05-13 18:35
prince
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-5-13
收藏
得分:0 
很好
我顶

教父,已经成为过去;谁来继写这段传说?----我!
2005-05-16 17:01
sunshineqs
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2005-6-2
收藏
得分:0 
什么是回溯法

2005-06-04 16:06
zefil415
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-6-4
收藏
得分:0 
谁来讲清楚一点???
2005-06-07 02:40
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
国际象棋里面的皇后。皇后 行列斜都可以吃棋子。如果同一行,列,对角线。那2个皇后就互相攻击。题目就是要求在棋盘里摆出互不攻击的8个皇后。 设在初始状态下在国际象棋棋盘上没有任何棋子(这里的棋子指皇后棋子).然后顺序在第1行,第2行,...,第8行上布放棋子.在每一行中共有8个可选择位置,但在任一个时刻棋盘的合法布局都必须满足3个限制条件: (1)任意两个棋子不得放在同一行上; (2)任意两个棋子不得放在同一列上; (3)任意两个棋子不得放在同一正斜线和反斜线上.年、编写求解并输出此问题的一个合法布局的程序.

[此贴子已经被作者于2005-6-7 7:23:19编辑过]


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-06-07 07:22
asions59
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-12-2
收藏
得分:0 



...........

为什么我用TC运行了上面的程序之后有错误的....
2010-12-02 17:24
快速回复:八皇后(回朔法)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017908 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved