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

经典DFS问题实践

时间:2017-04-24 21:16:47      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:log   ace   ios   mem   int   set   else   pac   row   

八皇后问题:

 1 //八皇后问题  经典的DFS问题实践
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstdio>
 6 using namespace std;
 7 int mat[8][8];
 8 int ans=0;
 9 bool check(int row,int col)//最终检查满足要求,则return 1
10 {
11     for(int i=0;i<row;i++)
12     {
13         if(mat[i][col])
14             return false;
15         for(int j=0;j<8;j++)
16         {
17             //不能在同一条对角线上
18             if(mat[i][j])
19             {
20               if(fabs(i-row)-fabs(j-col)==0)
21                  return 0;
22               else
23                  continue;
24 
25             }
26         }
27     }
28     return 1;
29 }
30 int dfs(int row)
31 {
32     if(row>=8)
33     {
34         ans++;
35         for(int i=0;i<8;i++)
36         {
37             for(int j=0;j<8;j++)
38                cout<<mat[i][j]<<" ";
39             cout<<endl;
40         }
41         cout<<endl;
42     }
43     for(int col=0;col<8;col++)
44     {
45         if(check(row,col))
46         {
47             mat[row][col]=1;
48             dfs(row+1);
49             mat[row][col]=0;
50         }
51     }
52     return 0;
53 }
54 int main()
55 {
56     memset(mat,0,sizeof(mat));
57     dfs(0);
58     cout<<"一共有"<<ans<<"种解决方案"<<endl;
59 }

 //最终结果显示一共有92种解决方案

经典DFS问题实践

标签:log   ace   ios   mem   int   set   else   pac   row   

原文地址:http://www.cnblogs.com/guohaoyu110/p/6758664.html

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