八皇后问题——回溯

Posted 会飞的咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后问题——回溯相关的知识,希望对你有一定的参考价值。

经典八皇后问题参考博客http://blog.csdn.net/mbh_1991/article/details/23869459

下面解决八皇后的改版问题:

AC代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 char board[10][10];
 6 int board2[10][10];
 7 int num=0;                                    //记录八皇后的个数 
 8 int res=0; 
 9 int dir[3][2]={{-1,-1},{-1,1},{-1,0}};        //检测三个方向,左上,右上,正上(对一排来说,从上往下放置只看上一层的情况) 
10 
11 void init(){                                 //初始化 
12     for(int i=1;i<=8;i++){
13         for(int j=1;j<=8;j++){
14             board[i][j]=\'.\';
15             cin>>board2[i][j];
16         }
17     }
18 } 
19 
20 bool check(int i,int j){                                //行和列 
21     bool flag=true;
22     for(int p=0;p<3;p++){
23         int ni=i;
24         int nj=j;
25         while(flag&&(ni>=1)&&(ni<=8)&&(nj>=1)&&(nj<=8)){//判断是否到棋盘边界 
26             ni+=dir[p][0];
27             nj+=dir[p][1]; 
28             flag=flag&&(board[ni][nj]!=\'*\');            //判断这个方向没有放过皇后 
29         }
30     }
31     return flag;
32 }
33 
34 void allMax(){                                      //查找最大值 
35     int sum=0;
36     for(int i=1;i<=8;i++){
37         for(int j=1;j<=8;j++){
38             if(board[i][j]==\'*\'){
39                 sum+=board2[i][j];
40             }
41         }
42     }
43     if(sum>res){
44         res=sum;
45     }
46 } 
47 
48 void dfs(int i){        
49     if(i>8){                    //判断是否超过了八行
50         allMax();
51         num++; 
52     }else{
53         for(int j=1;j<=8;j++){        //判断一行是否有匹配的位置 
54             if(check(i,j)){
55                 board[i][j]=\'*\';     //放置皇后 
56                 dfs(i+1);
57                 board[i][j]=\'.\';     //清除放错的皇后 
58             }
59         }
60     } 
61 }
62 
63 int main(){
64     init();
65     dfs(1);
66     cout<<res<<endl;
67     return 0;
68 }

 

以上是关于八皇后问题——回溯的主要内容,如果未能解决你的问题,请参考以下文章

八皇后,回溯与递归(Python实现)

八皇后问题——回溯

八皇后问题求解java(回溯算法)

回溯法八皇后问题(递归和非递归)

回溯算法--八皇后问题

回溯算法解八皇后问题(java版)