八皇后(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;
    }
}


目录
相关文章
|
2月前
|
存储 人工智能
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(中)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
22 0
|
9月前
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
|
2月前
八皇后问题与其深度优先搜索 (DFS) 解法
八皇后问题与其深度优先搜索 (DFS) 解法
53 1
|
9月前
|
程序员 定位技术 C++
[蓝桥杯] 双指针、BFS和DFS与图论问题
本篇文章针对蓝桥杯比赛的考点,列出双指针、BFS和DFS与图论的相关习题以及知识点的解释。希望本篇文章会对你有所帮助。
57 0
|
12月前
|
移动开发 算法
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
81 0
|
12月前
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
52 0
|
12月前
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
45 0
|
12月前
|
机器学习/深度学习
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
74 0
|
算法
从三道leetcode掌握深度优先搜索(DFS)
前言 无论在算法面试还是刷题中,深度优先搜索(DFS)和广度优先搜索(BFS)都是一个绕不过去的坎。不同于数组的从左至右遍历,循环常用于一维数据结构的遍历。而DFS和BFS则常用于多维数据结构的遍历,最常见的莫过于嵌套结构的多叉树了。
|
机器学习/深度学习 算法 JavaScript
从 DFS 到回溯法,再看 N 皇后问题
DFS 是深度搜索,是暴力的,是一条道走到黑的,是一次性搜到底的!那么,搜到底发现没有路了,就得回退去找另外的路,再继续莽着搜!既然要回退,就必须保存走过每个点的所有信息,包括先后顺序;这个回退的过程就叫 回溯。