八皇后(dfs全排列)

简介: 八皇后(dfs全排列)

流程都在代码注释里说明了

递归的过程理解

f9b61085e01942f19d566ab8cca56982.jpg沿着树根向下递归,到树根的尽头后就开始回溯到上一个树根分叉点,然后向右递归直到全部区域被遍历

每次到达树根尽头就输出

#include <iostream>
using namespace std;
const int N  = 10;
int a[N],no;
bool col[N],dg[N*2],udg[N*2];
void output();
void dfs(int);
int main(){
    dfs(0);
    return 0;
}
void dfs(int u){
    for(int i = 0;i < 8 ;i++){
        if(!col[i] && !dg[u+i] && !udg[8 - u + i]){
            col[i] = dg[u+i] = udg[8 - u + i] = true;
            a[u] = i;//记录下第u个皇后的所在的列号(横坐标)
            if(u == 7){//皇后0-7全部找完了,则输出此种情况
                output();
            } 
            else dfs(u+1);//没找完,继续找
            col[i] = dg[u+i] = udg[8 - u + i] = false;//回溯时恢复现场
        }
    }
    return;
}
void output(){
    cout << "No. " << ++ no << endl;
    for(int i = 0;i < 8;i++){
        for(int j = 0; j < 8;j++){
            if(a[j] == i) cout << "1 " ;//读到的位置是第i行的皇后的位置,则输出1
            else cout << "0 "; //否则输出0
        }
        cout << endl;
    }
}


目录
相关文章
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
132 0
|
6月前
|
算法
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(上)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
92 0
|
6月前
|
存储 人工智能
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(中)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
47 0
|
6月前
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(下)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
36 0
|
6月前
八皇后问题与其深度优先搜索 (DFS) 解法
八皇后问题与其深度优先搜索 (DFS) 解法
74 1
|
程序员 定位技术 C++
[蓝桥杯] 双指针、BFS和DFS与图论问题
本篇文章针对蓝桥杯比赛的考点,列出双指针、BFS和DFS与图论的相关习题以及知识点的解释。希望本篇文章会对你有所帮助。
86 0
|
移动开发 算法
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
103 0
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
69 0
|
机器学习/深度学习
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
93 0
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
58 0