DFS中的连通性和搜索顺序

宽搜一般要手写一个队列,深搜一般是用系统栈来实现的。

DFS之连通性模型

 

1112. 迷宫 - AcWing题库 

import java.util.*;public class Main{static int N = 110, ha, la, hb, lb, n;static char[][] g = new char[N][N];static boolean[][] st = new boolean[N][N];static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};public static boolean dfs(int start, int end){if(g[start][end] == '#') return false;//如果一开始起点就是障碍物if(start == hb && end == lb) return true;//如果遍历到终点st[start][end] = true;//标记为已搜过for(int i = 0; i < 4; i ++){int a = start + dx[i];int b = end + dy[i];if (a < 0 || a >= n || b < 0 || b >= n) continue;//越界if(!st[a][b]){//如果这个点没走过if(dfs(a, b)) return true;}}return false;}public static void main(String[] args){Scanner sc = new Scanner(System.in);int T = sc.nextInt();while(T -- > 0){n = sc.nextInt();for(int i = 0; i < n; i ++){String s = sc.next();for(int j = 0; j < n; j ++){g[i][j] = s.charAt(j);st[i][j] = false;//由于有多组数组,所以每一次都要重置为false}}ha = sc.nextInt();la = sc.nextInt();hb = sc.nextInt();lb = sc.nextInt();if(dfs(ha, la)) System.out.println("YES");else System.out.println("NO");}}
}

 

1113. 红与黑 - AcWing题库

import java.util.*;public class Main{static int N = 25;static int n, m, cnt;static char[][] g = new char[N][N];static boolean[][] st = new boolean[N][N];static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};public static void dfs(int x, int y){st[x][y] = true;cnt ++;for(int i = 0; i < 4; i ++){int a = x + dx[i];int b = y + dy[i];if(a < 0 || b < 0 || a >= n || b >= m) continue;if(st[a][b]) continue;if(g[a][b] == '#') continue;dfs(a, b);}}public static void main(String[] args){Scanner sc = new Scanner(System.in);while(true){m = sc.nextInt();n = sc.nextInt();if(m == 0 && n == 0) break;int x = 0;int y = 0;cnt = 0;for(int i = 0; i < n; i ++){String s = sc.next();for(int j = 0; j < m; j ++){g[i][j] = s.charAt(j);st[i][j] = false;//由于有多组测试数组,所以每次要重置st数组if(g[i][j] == '@'){//用来确定起点的位置x = i;y = j;}}}dfs(x, y);System.out.println(cnt);}}
}

 

DFS之搜索顺序

1116. 马走日 - AcWing题库

import java.util.*;public class Main{static int N = 15;static int n, m, res, sx, sy;static int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2};static int[] dy = {1, 2, 2, 1, -1, -2, -2, -1};static boolean[][] st = new boolean[N][N];public static void dfs(int x, int y, int cnt){if(cnt == n * m){res ++;//方案数加1return;//每次要记得返回}st[x][y] = true;for(int i = 0; i < 8; i ++){int a = x + dx[i];int b = y + dy[i];if(a < 0 || b < 0 || a >= n || b >= m) continue;if(st[a][b]) continue;dfs(a, b, cnt + 1);}st[x][y] = false;//回溯}public static void main(String[] args){Scanner sc = new Scanner(System.in);int t = sc.nextInt();while(t -- > 0){n = sc.nextInt();m = sc.nextInt();sx = sc.nextInt();sy = sc.nextInt();res = 0;//因为有多组测试数据,所以每次答案要重置dfs(sx, sy, 1);//1表示已经遍历了几个点System.out.println(res);}}
}

1117. 单词接龙 - AcWing题库

import java.util.*;public class Main{static int N = 25, n, res;static int[][] g = new int[N][N];//g[n][m]表示编号为n和m的单词的最短重合的长度static int[] used = new int[N];//表示这个编号的单词用了多少次static String[] word = new String[N];//给出的单词static char lead;public static void dfs(String dragon, int last){res = Math.max(res, (int)dragon.length());//每次都比较一下used[last] ++;//每次使用都加一下for(int i = 0; i < n; i ++){if(g[last][i] != 0 && used[i] < 2){dfs(dragon + word[i].substring(g[last][i]), i);}}used[last] --;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();for(int i = 0; i < n; i ++){word[i] = sc.next();}lead = sc.next().charAt(0);//预处理出g数组for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){String a = word[i], b = word[j];//由于要想龙的长度最长,所以要使得两个单词重叠部分最短,至少重叠一个字母for(int k = 1; k < Math.min(a.length(), b.length()); k ++){if(a.substring(a.length() - k).equals(b.substring(0, k))){g[i][j] = k;break;}}}}//遍历所有是从龙头开始的单词for(int i = 0; i < n; i ++){if(word[i].charAt(0) == lead) dfs(word[i], i);//i表示单词的编号}System.out.print(res);}
}

 

1118. 分成互质组 - AcWing题库

import java.util.*;public class Main{static int N = 15;static int[] q = new int[N];static int[][] groud = new int[N][N];//每一组中第几个数的下标static boolean[] st = new boolean[N];//用来判断是否用过了static int n, res = N;//求最大公因数public static int gcd(int a, int b){return (b != 0 ? gcd(b, a % b) : a);}//判断一个数与这个组内的数是否都互质public static boolean check(int[] groud, int gc, int t){//第几组,这一组有几个数,要比较的数的下标for(int i = 0; i < gc; i ++){if(gcd(q[groud[i]], q[t]) > 1) return false;//公因数大于1,不互质}return true;}public static void dfs(int g, int gc, int tc, int start){if(g >= res) return;//如果组数已经大于等于我们最小组数,就直接返回if(tc == n) res = g;//用来判断是否要开一个新的组boolean flag = true;for(int i = start; i < n; i ++){if(!st[i] && check(groud[g], gc, i)){flag = false;//有数组可以放就不用开新的数组st[i] = true;groud[g][gc] = i;dfs(g, gc + 1, tc + 1, i);st[i] = false;//回溯}}if(flag) dfs(g + 1, 0, tc, 0);//重开一个组,组内的数一开始应该为0,tc总数不变,应该从0开始搜}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();for(int i = 0; i < n; i ++){q[i] = sc.nextInt();}dfs(1, 0, 0, 0);//第一组,当前第一组中有0个数,一共已经搜索了0个数,从第0个数开始搜System.out.print(res);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顶顶通呼叫中心中间件-使用http接口方式把在通话的机器人话术手动转给人工坐席分机操作步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-机器人话术中手动转接到人工坐席分机上讲解(mod_cti基于FreeSWITCH) 需要了解呼叫中心中间件可以点此链接添加联系方式顶顶通小孙 一、操作步骤 1、自动外呼进入机器人话术 这里就不详细说了&#xff0c;可以去参考我的这一篇文章自动外呼进入机器人 …

nginx 日志,压缩,https功能介绍

一&#xff0c; 自定义访问日志 &#xff08;一&#xff09;日志位置存放 1&#xff0c;格式 2&#xff0c; 级别 level: debug, info, notice, warn, error, crit, alert, emerg 3&#xff0c;示例 服务机定义 错误日志存放位置 客户机错误访问 查看错误日志 4&#xff…

DAY9-防病毒AV概述

DNS过滤 URL过滤和DNS过滤对比

C#面:ref 和 out 的区别

ref 关键字&#xff1a; 在使用 ref 关键字时&#xff0c;传递的参数必须在方法调用之前进行初始化。在方法内部&#xff0c;对 ref 参数的任何修改都会影响到原始变量。ref 参数在方法内部和外部都必须具有相同的类型。 out 关键字 out 参数在方法内部必须被赋值。在使用 ou…

广和通5G智能模组SC171支持Android、Linux和Windows系统,拓宽智能物联网应用

世界移动通信大会2024期间&#xff0c;广和通宣布&#xff1a;5G智能模组SC171除支持Android操作系统外&#xff0c;还兼容Linux和Windows系统&#xff0c;帮助更多智能终端客户快速迭代产品&#xff0c;拓宽智能化应用覆盖范围。 广和通SC171系列基于高通QCM6490物联网解决方案…

oracle with check option 学习

with check option保证了通过视图进行的修改&#xff0c;必须也能通过该视图看到修改后的结果&#xff1b; 你插入&#xff0c;那么插入这条记录在刷新视图后必须可以看到&#xff1b; 如果修改&#xff0c;修改完的结果也必须能通过该视图看到&#xff1b; scott登录了以后创…

【Java程序设计】【C00320】基于Springboot的招生宣传管理系统(有论文)

基于Springboot的招生宣传管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生宣传管理系统&#xff0c;本系统有管理员以及招生人员二种角色&#xff1b; 前台&#xff1a;首页、专业介绍、师资力量、联…

Vue3.0+TS管理系统基础使用之变量声明、计算属性、监听属性

将近一年没写过管理系统了&#xff0c;上一次用的还是vue2js&#xff0c;这次接手的项目是Vue3ts&#xff0c;一眼看过去好熟悉的style&#xff0c;第二眼开始蒙&#xff0c;数据写哪&#xff1f;计算属性咋写啊&#xff1f; 这里用到了一个第三方库vue-property-decorator。 …

Spring Boot项目中如何上传头像?

在我们常见的各大App中&#xff0c;或多或少我们都见过上传头像的功能吧&#xff1f;&#xff1f; 但是在Spring Boot项目中如何上传头像呢&#xff1f; 上传头像主要用到RequestPart注解 来看一下小编的代码吧&#xff01; RestController RequestMapping("/param"…

cartographer ceres后端优化

这里引用一篇文章 https://zhuanlan.zhihu.com/p/567635409 因为cartographer中的代码有的地方添加了AddParameterBlock,有的地方没有添加,会引起歧义,原来AddParameterBlock可以隐式添加优化变量,这篇文章介绍了具体原因,核心内容如下: AddParameterBlock的作用作用一:…

服务器机房安全守护:五大物理安全实践

服务器机房是数字企业的心脏。无论是企业家还是经验丰富的IT专业人员&#xff0c;都知道服务器机房的安全性至关重要。如果没有采用适当的物理安全措施&#xff0c;其服务器很容易受到盗窃、人为破坏和自然灾害的破坏。 在保护服务器机房的领域内&#xff0c;需要采用多方面的…

鸿蒙应用程序包安装和卸载流程

开发者 开发者可以通过调试命令进行应用的安装和卸载&#xff0c;可参考多HAP的调试流程。 图1 应用程序包安装和卸载流程&#xff08;开发者&#xff09; 多HAP的开发调试与发布部署流程 多HAP的开发调试与发布部署流程如下图所示。 图1 多HAP的开发调试与发布部署流程 …

16. QML中的一些粒子特效

1.说明 在使用unity开发游戏时&#xff0c;都会涉及到一些特效的开发。实际上在QML中也提供了一些可以做特效的控件&#xff0c;称之为粒子系统。本篇博客主要记录一些使用粒子做特效的方式。 特效–火焰效果&#xff1a; 2. 案例汇总 2.1 案例1 效果展示&#xff1a; 粒子…

TypeScript 类型断言 关于 “ as “ 语法的各种用法

在 TypeScript 中&#xff0c;as 关键字用于类型断言&#xff0c;允许你将某个值强制转换为你期望的类型。下面是一些使用as关键字将值断言为不同类型的例子&#xff1a; 断言为 Object let someValue: any { ... }; let obj someValue as Object;断言为 string let someV…

标准库`random`函数大全:探索Python中的随机数生成【第107篇—`random`函数大全】

标准库random函数大全&#xff1a;探索Python中的随机数生成 随机数在计算机科学和数据科学领域中扮演着重要角色&#xff0c;Python的标准库中提供了random模块&#xff0c;用于生成各种随机数。本篇博客将深入探讨random模块的各种函数&#xff0c;以及它们的应用场景和代码…

MATLAB中的makeweight函数

W makeweight(dcgain,[freq,mag],hfgain) W makeweight(dcgain,[freq,mag],hfgain,Ts) W makeweight(dcgain,[freq,mag],hfgain,Ts,N) W makeweight(dcgain,wc,hfgain,___) W makeweight(dcgain,wc,hfgain&#xff0c;___)表示增益交叉频率wc。该语法相当于将…

2.27数据结构

1.链队 //link_que.c #include "link_que.h"//创建链队 Q_p create_que() {Q_p q (Q_p)malloc(sizeof(Q));if(qNULL){printf("空间申请失败\n");return NULL;}node_p L(node_p)malloc(sizeof(node));if(LNULL){printf("申请空间失败\n");return…

AI:144-通过机器学习预测股票市场趋势

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

LLM int4算法autoround v0.1即将发布,欢迎试用

概述 AutoRound&#xff08;https://github.com/intel/auto-round&#xff09;实现了出色的量化性能&#xff0c;在W4G128上多数场景中接近无损压缩&#xff0c;适用于包括gemma-7B、Mistral-7b、Mixtral-8x7B-v0.1、Mixtral-8x7B-Instruct-v0.1、Phi2、LLAMA2等一系列流行模型…

华为云磁盘挂载

华为云磁盘挂载 磁盘挂载情况 fdisk -l 2. 查看当前分区情况 df -h 3.给新硬盘添加新分区 fdisk /dev/vdb 4.分区完成&#xff0c;查询所有设备的文件系统类型 blkid 发现新分区并没有文件系统类型&#xff08;type为文件系统具体类型&#xff0c;有ext3,ext4,xfs,iso9660等…