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

八皇后问题——回溯

时间:2018-02-03 23:16:17      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:八皇后问题   file   net   inf   匹配   mes   algorithm   max   ret   

经典八皇后问题参考博客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 }

 

八皇后问题——回溯

标签:八皇后问题   file   net   inf   匹配   mes   algorithm   max   ret   

原文地址:https://www.cnblogs.com/cxq1126/p/8410850.html

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