10. DFS +BFS

1.DFS问题

1.1 DFS解决全排列问题 

int  n = 3;
int path[100];
int st[100];

void dfs(int u) {
	if (u == n) {
	}
	for (int i = 1; i <= n; i++) {
		if (!st[i]) {
			path[u] = i;
			st[i] = true;
			dfs(u + 1);
			st[i] = false;
		}
	}
}



void main() {

	dfs(0);

}

dfs+回溯;每次结束的时候,完成现场的恢复

 1.2 N皇后问题

class Solution {
public:
int col[1000],dg[1000],udg[1000];
vector> res;
int path[1000][1000];

void dfs(int u ,int n){
    if(u==n){
        vectorres_string;
        for(int i =0;i> solveNQueens(int n) {
        for(int i =0;i

2. BFS问题

1. 将起点入队

2. 将队列内 首节点可拓展的节点入队,并将首节点出队

3.重复以上步骤,知道达到目标位置,或者队列为空

2.1 关于迷宫问题

dx[4] = {0,0,-1,1},dy[4]={-1,1,0,0};//上下左右
class Solution {
public:
    deque>res;
    int dx[4] = {0,0,-1,1},dy[4]={-1,1,0,0};
    int st[110][110];
    
    int bfs(vector>& maze,vector& entrance,int n,int m){
        res.push_back({entrance[0],entrance[1]});
        st[entrance[0]][entrance[1]]=0;
        while(!res.empty()){
            auto item =res.front();
            for(int i =0;i<4;i++){
                int x = item.first+dx[i],y = item.second + dy[i];
                //cout<>& maze, vector& entrance) {
        memset(st,-1,sizeof st);
       int temp =  bfs(maze,entrance,maze.size(),maze[0].size());
       return temp;
        //return 0;
    }
};

你可能感兴趣的:(#,算法大全,深度优先,算法,图论)