DFS,BFS傻傻分不清

Posted 猪八戒1.0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFS,BFS傻傻分不清相关的知识,希望对你有一定的参考价值。

一.概念

DFS深搜,执着总是一条路走到头,直到最后没有路了才回溯,其实就是递归

BFS广搜,稳重,每次都往下找一层

辨析:

        虽然DFS用的空间小,但不具有最短性,可能是

        而BFS用的空间每层都是指数型增长,但由于每次都找一层中的所有,在权值相等时,相同层数最后找不到一定是最优路径

 二.题目练习

 代码实现:

import java.util.Scanner;
public class Main 
	static int N=20;
	static int n;
	static char g[][]=new char[N][N];
	static boolean col[]=new boolean[N];
	static boolean udg[]=new boolean[N];//左斜
	static boolean dg[]=new boolean[N];
	public static void main(String[] args) 
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		for(int i=0;i<n;i++) 
			for(int j=0;j<n;j++) 
				g[i][j]='.';
			
		
		dfs(0);
	
	public static void dfs(int u) 
		if(u==n) 
			for(int i=0;i<n;i++)
				System.out.println(g[i]);
			System.out.println();
			return;
		
		for(int i=0;i<n;i++) 
			if(!col[i]&&!udg[i-u+n]&&!dg[i+u]) 
				g[u][i]='Q';
				col[i]=udg[i-u+n]=dg[i+u]=true;
				dfs(u+1);
				col[i]=udg[i-u+n]=dg[i+u]=false;
				g[u][i]='.';
			
		
		
	

题目:n皇后问题

问有多少种情况

有手就行



import java.util.Scanner;
public class Main 
	static int N=20;
	static int n,res;
	static char g[][]=new char[N][N];
	static boolean col[]=new boolean[N];
	static boolean udg[]=new boolean[N];//左斜
	static boolean dg[]=new boolean[N];
	public static void main(String[] args) 
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		for(int i=0;i<n;i++) 
			for(int j=0;j<n;j++) 
				g[i][j]='.';
			
		
		dfs(0);
		System.out.println(res);
	
	public static void dfs(int u) 
		if(u==n) 
			res++;
			return;
		
		for(int i=0;i<n;i++) 
			if(!col[i]&&!udg[i-u+n]&&!dg[i+u]) 
				g[u][i]='Q';
				col[i]=udg[i-u+n]=dg[i+u]=true;
				dfs(u+1);
				col[i]=udg[i-u+n]=dg[i+u]=false;
				g[u][i]='.';
			
		
		
	

以上是关于DFS,BFS傻傻分不清的主要内容,如果未能解决你的问题,请参考以下文章

一文搞懂深度优先搜索广度优先搜索(dfsbfs)

一文搞懂深度优先搜索广度优先搜索(dfsbfs)

算法系列之广度优先搜索与深度优先搜索

算法笔记图结构及图的 DFS 和 BFS 介绍

基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)

算法-03 | 深度优先DFS| 广度优先BFS