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傻傻分不清的主要内容,如果未能解决你的问题,请参考以下文章