首页 > 其他分享 >备赛蓝桥----DFS篇

备赛蓝桥----DFS篇

时间:2022-10-17 22:04:14浏览次数:45  
标签:---- Scanner int 备赛 dfs 蓝桥 boolean static new


目录

​排列数字​

​n-皇后问题​

备赛蓝桥----DFS篇_蓝桥杯

排列数字

备赛蓝桥----DFS篇_数组_02

备赛蓝桥----DFS篇_i++_03

import java.util.Scanner;

/**
* @author yx
* @date 2022-01-29 14:23
*/
/*
排列数字问题
*/
public class DFS_1 {
static boolean st[]=new boolean[10];//这两个数组是公用的所以要设置成静态的
static int path[]=new int[10];

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
dfs(0,n);
return;
}
static void dfs(int u,int n){
if(u==n){//当遍历到最底部时,输出路径上所有的数
for (int i=0;i<n;i++){
System.out.print(path[i]);
}
System.out.println("");
return;
}
//下面这段代码需要细细去理解
for (int i=1;i<=n;i++){
if(!st[i]){//刚开始赋值的时候默认st[i]为false
path[u]=i;
st[i]=true;
dfs(u+1,n);
st[i]=false;//回溯,恢复原节点
}
}
}
}

备赛蓝桥----DFS篇_深度优先_04

n-皇后问题

备赛蓝桥----DFS篇_蓝桥杯_05

备赛蓝桥----DFS篇_i++_06

import java.util.Scanner;

/**
* @author yx
* @date 2022-01-29 23:11
*/
/*
八皇后问题
*/
public class DFS_2 {
static char g[][]=new char[4][4];
static boolean col[] = new boolean[20];
static boolean dg[] = new boolean[20];//对角线数组
static boolean udg[] = new boolean[20];//反对角线数组

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
g[i][j]='.';
}
}
dfs(0,n);
}
static void dfs(int u,int n){
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]&&!dg[u+i]&&!udg[n-u+i]){//下标的原有如图解析所示
g[u][i]='Q';
col[i]=dg[u+i]=udg[n-u+i]=true;//表示(u,i)点的列、正斜对角线上被占用
dfs(u+1,n);//递归
col[i]=dg[u+i]=udg[n-u+i]=false;//回溯,回复原来的状态
g[u][i]='.';
}
}
}
}

dg[ u+i]、udg[n-u+i]内下标数字的解析

 

备赛蓝桥----DFS篇_蓝桥杯_07

备赛蓝桥----DFS篇_算法_08

 总结:

    DFS的核心思想就是递归,上面这两个例子多花时间琢磨琢磨,静下心来感受算法的美。

标签:----,Scanner,int,备赛,dfs,蓝桥,boolean,static,new
From: https://blog.51cto.com/u_15754851/5764497

相关文章

  • python爬虫从0到1 -urllib_Cookie登录
    前言当我们进行某项数据采集的时候,有时会让我们进行登录,那我们要怎样去解决这个问题呢?为了不让我们爬取这些数据,又采取了怎么样的反爬措施呢?下面就让我们带着这些问题去一探......
  • PS2
    介绍[captionid="attachment_2866"align="aligncenter"width="640"]​​​​PS2[/caption]库下载​​PS2Keyboard​​参考......
  • ADXL345
    介绍ADXL345是加速度传感器。参考​​http://www.geek-workshop.com/forum.php?mod=viewthread&tid=80​​​......
  • BMP180
    介绍BMP180是气压传感器。库下载​​SFE_BMP180​​参考​​http://www.geek-workshop.com/thread-12657-1-1.html​​​......
  • 绿箭侠
    介绍一部典型的美国英雄主义电视剧。第四季......
  • opencv
    介绍opencv是一个开源的用于图像处理的库,它对包括C/C++、java、python等语言有支持。安装将opencv\python\2.7\x64\cv2.pyd拷贝到python的安装目录下:Python27\Lib\site-pac......
  • FPV
    介绍FPV是英文FirstPersonView的缩写,及第一人称视角,是一种基于遥控航模或者车辆模型上加装无限摄像头回传设备,通过远程来查看画面、操作模型的玩法。相关设备FPV系统的主......
  • MPU-6050
    介绍MPU-6050(三轴陀螺仪+三轴加速度)接线A4接SDAA5接SCLVCC接3.3VGND接GND参考​​http://www.geek-workshop.com/forum.php?mod=viewthread&tid=1017​​​......
  • Python与JavaScript交互
    介绍“胶水”语言Python很擅长于其他语言交互,本文介绍如何与JavaScript来交互。 ......
  • arduino操作PN532
    介绍参考​​http://www.arduino.cn/thread-5960-1-1.html​​​......