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

回溯4--八皇后问题

时间:2017-07-05 10:07:04      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:bsp   include   不同   int()   for   没有   target   nbsp   alt   

回溯4--八皇后问题

一、心得

 

二、题目及分析

皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

 

默认从每行开始摆,判断竖和两斜
八皇后问题:
这题的标记数组有三个
原数组数组没有
结果数组有

 

三、代码及结果

 1 /*
 2 默认从每行开始摆,判断竖和两斜 
 3 八皇后问题:
 4 这题的标记数组有三个
 5 原数组数组没有
 6 结果数组有 
 7 */
 8 #include <iostream>
 9 using namespace std;
10 int b1[100],b2[100],b3[100];
11 //b1是竖 b2是正斜 b3是反斜 
12 int ans[100];
13 int total=0;
14 
15 void print(){
16     total++;
17     cout<<"<"<<total<<">"<<": ";
18     for(int i=1;i<=8;i++){
19         cout<<ans[i]<<" ";
20     }
21     cout<<endl;
22 } 
23 
24 void search(int t){//t是轮数,也是行数 
25     if(t==9) print();
26     else
27         for(int i=1;i<=8;i++){
28             if(b1[i]==0&&b2[t-i+16]==0&&b3[t+i]==0){
29                 ans[t]=i,b1[i]=1,b2[t-i+16]=1,b3[t+i]=1;
30                 search(t+1);
31                 b1[i]=0,b2[t-i+16]=0,b3[t+i]=0;    
32             } 
33         }
34 } 
35 int main(){
36     search(1);
37     cout<<total<<endl;
38     return 0;
39 } 

技术分享

回溯4--八皇后问题

标签:bsp   include   不同   int()   for   没有   target   nbsp   alt   

原文地址:http://www.cnblogs.com/Renyi-Fan/p/7119283.html

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