- MySQL多表查询进阶实战:连接与子查询深度解析
一、多表连接核心原理1.七种JOIN操作--创建测试数据CREATETABLEdepartments(dept_idINTPRIMARYKEY,dept_nameVARCHAR(50));CREATETABLEemployees(emp_idINTPRIMARYKEY,emp_nameVARCHAR(50),dept_idINT);--1.内连接(INNERJOIN)SELECTe.emp_nam
- MySQL高级查询:聚合与分组分析实战指南
Yang's
mysqlsql数据库
一、聚合函数深度解析1.五大核心聚合函数--统计员工数量SELECTCOUNT(*)AStotal_employeesFROMemployees;--计算平均薪资(排除NULL)SELECTAVG(IFNULL(salary,0))ASavg_salaryFROMemployees;--获取最高/最低薪资SELECTMAX(salary)ASmax_salary,MIN(salary)ASmin_
- basic verilog 语法--FPGA入门1
Kent Gu
FPGAfpga开发
1,Assign语法Assignisonlyforwiretypevarity;1.1definemodulemain(inputclkIn,//50M,20nsinputspi_clk,inputspi_mosi,inputspi_cs,inputreset_FPGA,outputwireout_LD_PULS_trig_Out//LDtrigout)1.2assignout_LD_PULS_t
- PostgreSQL配置
14.10日志#使用logratate日志轮转#启用日志收集器(csvlog必须开启)logging_collector=on#日志输出目标log_destination='stderr,csvlog'#设置日志目录(相对$PGDATA)log_directory='/var/log/pg_log'#按天分割日志文件(YYYY-MM-DD格式)#log_filename='postgresql-%
- C# 中的 .Select() 方法与 JavaScript 中的 .map() 方法功能类似,都是用于对集合中的每个元素进行转换并返回新的集合。
NPCZ
c#javascript
一、核心功能对比1.JavaScript的.map()遍历数组,对每个元素执行回调函数,并返回包含结果的新数组:constnumbers=[1,2,3];constsquared=numbers.map(x=>x*x);//结果:[1,4,9]2.C#的.Select()遍历集合(如List、IEnumerable),对每个元素应用转换函数,并返回新的序列:varnumbers=newList{1
- winform mvvm
lph1972
java前端服务器
if(!mvvmContext1.IsDesignMode)InitializeBindings();这段代码的意思是:如果当前应用程序不是处于设计模式(即程序正在运行),就调用InitializeBindings方法来初始化视图与视图模型之间的绑定。voidInitializeBindings(){varfluent=mvvmContext1.OfType();}MainViewModel调用选
- MySQL升级5.7.28到5.7.44以及8.0.22到8.0.35
Romona_J
mysqladbandroid
MYSQL的升级MySQL升级5.7.22-5.7.44属于MySQL的小版本升级升级前检查检查mysql的启动方式ps-ef|grepmysqld检查MySQL的安装路径以及数据文件路径whereismysqlmysql>showvariableslike'%dir%';+-----------------------------------------+--------------------
- 力扣 hot100 Day32
19.删除链表的倒数第N个结点给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。//自己写的classSolution{public:ListNode*removeNthFromEnd(ListNode*head,intn){ListNode*cur=head;intlen=0;while(cur!=nullptr){len++;cur=cur->next;}inttmp=0;if(t
- 力扣 hot100 Day34
qq_51397044
Hot100leetcode算法
226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点翻转的定义是,对于每个节点,交换它的左右子树//抄的classSolution{public:TreeNode*invertTree(TreeNode*root){if(root==nullptr)returnnullptr;TreeNode*left=invertTree(root->left);TreeNode*r
- 【WRFDA教程第二期】运行WRFDA 3DVAR/4DVAR数据同化
目录一、准备阶段:下载并解压测试数据二、运行3DVAR教学实验日志分析(wrfda.log)进阶实验建议:对比不同设置的影响输出文件说明三、运行4DVAR教学实验步骤1:准备工作目录与环境变量步骤2:链接可执行文件与输入数据步骤3:配置namelist.input步骤4:可选-使用边界条件控制变量(var4d_lbc)如果使用PREPBUFR格式观测数据运行WRFDA4DVAR输出文件说明另:运行
- 5-3WPSJS宏创建数组两种方式应用(提取字符串中的数字)学习笔记
爱上妖精的尾巴
WPSJS宏编程教程学习笔记学习笔记wpsJS宏javascriptJSA
要求:提取字符串中的数字functiontest(){varnewarr=[];varRngs=Range("a2",Cells(999,1).End(xlUp));//获取工作范围for(varRngofRngs){//循环vararr=[...Rng.Value()];//arr可无限增大的数组for(vararofarr){//循环if(Number(ar)>-1){//Number(ar)
- 5-2 WPS JS宏创建数组两种方式(字面量与扩展操作符)学习笔记
爱上妖精的尾巴
WPSJS宏编程教程学习笔记javascript学习笔记wpsjsJS宏jas
一、字面量创建数组:functiontest1(){varn=100;vararr1=[];//空数组vararr2=["曾贤志",24,n,n*10,[1,2]]//数组中的不同类型元素vararr3=[78,,12]//稀疏数组}二、扩展操作符创建数组:functiontest2(){vararr1=[1,2,3];//arr1显示结果:[1,2,3]vararr2=[...arr1]//创建
- 3-20 WPS JS宏调用工作表函数应用(选平均分大于等于 90的记录)学习笔记
实例:要求:筛选平均分大于等于90的记录并复制在指定位置functiontest(){Range("f2:h99").ClearContents();//清除内容varwsf=WorksheetFunction,newnum=2;//赋值两个内容varcounter=wsf.CountA(Range("a:a"));//a例的个数for(varrownum=2;rownum=90){//判断平均数
- 获取Json字符串某节点的值
策码奔腾R
jsonc#
publicstaticstringGetJsonValue(stringjsonStr,stringkey){stringresult=string.Empty;if(!string.IsNullOrEmpty(jsonStr)){key="\""+key.Trim('"')+"\"";intindex=jsonStr.IndexOf(key)+key.Length+1;if(index>key
- Spark 4.0的VariantType 类型以及内部存储
鸿乃江边鸟
大数据SQLsparksparksql大数据
背景本文基于Spark4.0总结Spark中的VariantType类型,用尽量少的字节来存储Json的格式化数据分析这里主要介绍Variant的存储,我们从VariantBuilder.buildJson方法(把对应的json数据存储为VariantType类型)开始:publicstaticVariantparseJson(JsonParserparser,booleanallowDuplic
- C语言中字符串结束符的独特性:为何它与其他数组不同?
yong9990
c语言算法数据结构
在C语言的世界里,字符串作为字符数组的一种特殊形式,拥有着一个与众不同的特性——结束符。这个结束符,即空字符(NullCharacter),用\0表示,在字符串的末尾静静地守候,扮演着标识字符串终结的重要角色。相比之下,其他类型的数组,如整型数组、浮点型数组等,却并未享有这一待遇。那么,为何C语言要如此设计,使得字符串拥有结束符,而其他数组却没有呢?本文将从多个角度深入探讨这一设计背后的原因。一、
- oracle 命令 执行job_Oracle中job的使用详解
KelpDAO
oracle命令执行job
我们在项目开发中,常常会有一些复杂的业务逻辑。使用oracle的存储过程,可以大大减少java程序代码的编写工作量,而且存储过程执行在数据库上,这样可以利用oracle的良好性能支持,极大地提高程序执行效率和稳定性。定时执行存储过程,就要用到job。以下是常用的参数说明:字段(列)类型描述JOBNUMBER任务的唯一标示号LOG_USERVARCHAR2(30)提交任务的用户PRIV_USERVA
- MyBatis初识:为什么选择它?
双力臂404
mybatis基础mybatis开发语言
前言在Java持久层框架的江湖中,MyBatis像一位特立独行的侠客——它既不像JDBC那样需要开发者赤手空拳打天下,也不似Hibernate般用ORM大法将SQL完全封装。这种"中间派"的定位,恰恰解决了开发者在两个极端之间的长期困扰。JDBC的"三座大山"//典型JDBC代码片段Connectionconn=null;PreparedStatementps=null;ResultSetrs=n
- 「日拱一码」017 深度学习常用库——TensorFlow
目录基础操作张量操作:tf.constant用于创建常量张量tf.Variable用于创建可训练的变量张量tf.reshape可改变张量的形状tf.concat可将多个张量沿指定维度拼接tf.split则可将张量沿指定维度分割数学运算:tf.add张量的加运算tf.subtract张量的减运算tf.multiply张量的乘运算tf.divide张量的除运算tf.pow计算张量的幂tf.sqrt计算
- ArcGIS Pro SDK (七)编辑 2 启用编辑
Winemonk
ArcGISProSDKarcgisarcgisprosdkgisc#
ArcGISProSDK(七)编辑2启用编辑目录ArcGISProSDK(七)编辑2启用编辑1启用编辑2禁用编辑环境:VisualStudio2022+.NET6+ArcGISProSDK3.01启用编辑//如果没有正在编辑if(!Project.Current.IsEditingEnabled){varres=MessageBox
- android号码查询归属地,号码归属地识别-Android电话应用
倾城落雪
android号码查询归属地
题记自研的电话应用中,有两处使用了号码归属地,一处是通话记录页,一处是通话界面;那么它们是如何实现的呢?下面进行一步一步的分析。Dialer使用号码归属地通话记录页的号码归属地通过查询calls表中的Calls.GEOCODED_LOCATION字段,来进行获取号码的归属地。相关代码如下:查询:startQuery(token,null,uri,CallLogQuery._PROJECTION,s
- 【unitrix】 4.16 类型级别左移运算实现解析(shl.rs)
liuyuan77
我的unitrix库rust
一、源码这段代码实现了一个类型级别的左移运算(ShlforZ0{typeOutput=Z0;fnshl(self,_:R)->Self::Output{Z0}}//Zeroleftshiftedbyavariableamountisstillzero/零左移可变位数仍然是零implShl>forZ0{typeOutput=Z0;fnshl(self,_:Var)->Self::Output{Z0}
- C语言中的“记忆者”:静态局部变量与自动局部变量的深度对比
web安全工具库
2025C++学习c语言javajvm
资料合集下载链接:https://pan.quark.cn/s/472bbdfcd014在C语言的编程世界里,变量的“生命周期”是决定其行为的关键因素之一。我们之前探讨了变量的作用域,今天我们将聚焦于两种特殊的局部变量:自动局部变量(AutoLocalVariables)和静态局部变量(StaticLocalVariables)。它们虽然都存在于函数内部,但一个如“过客”般短暂,另一个却像一位“记
- docker windows 安装mysql:8.0.23
kobe_OKOK_
dockerwindowsmysql
dockerwindows安装mysql拉取镜像dockerpullmysql:8.0.23检查dockerimages创建容器dockerrun-p3306:3306--namemysql-vE:/docker_data_map/mysql/mysql-files:/var/lib/mysql-files-vE:/docker_data_map/mysql/conf:/etc/mysql-vE:
- Linux 宝塔mysql莫名其妙数据库不见了恢复数据库
起因:宝塔安装的mysql线上运行突然表包括库都不见了,想办法恢复数据库登陆mysqlcd/www/server/mysql/binmysql-uroot-p查看binlog日志是否打开showvariableslike'log_%';log_bin如果为ON则为开启状态,如果开启了才可以进行下一步操作查看下binlog日志列表binlog日志文件目录在/www/server/data目录下sho
- 单链表的“指定位置插入”算法代码
hnjzsyjyj
信息学竞赛#线性表单链表
【单链表的指定位置插入算法代码】#includeusingnamespacestd;structLNode{chardata;LNode*next;};typedefstructLNode*LinkList;voidTail_Insert(LinkList&L,intn){L=newLNode;L->next=NULL;LinkListr=L;for(inti=0;i>p->data;p->nex
- ListExtension 扩展方法增加 转DataTable()方法
方法1.判断集合是否为Null2.判断集合是否不为Null3.判断集合是否有值4.拼接成字符串5.根据一个表达式去除重复6.转DataTable泛型对象转换方法//////集合扩展方法///publicstaticclassListExtension{//////判断集合是否为Null////////////publicstaticboolIsNull(thisIEnumerablelist){r
- LeetCode:199. 二叉树的右视图(C++带详细注释)
Axe涛
Leetcode题目二叉树队列数据结构leetcode算法
LeetCode:199.二叉树的右视图(C++带详细注释)/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode(intx):val(x),left(NULL),right(NULL){}*};*/classSolution{public:vectorrig
- 199.二叉树的右视图(C++逐句解析)
lcy_robotics
c++算法leetcode
classSolution{public:vectorrightSideView(TreeNode*root){//方法的类型是vector,需要的参数是节点类型queueque;//创建队列,队列里存的是节点类型if(root!=NULL)que.push(root);//如果根节点不是空的,把根节点放入队列vectorresult;//创建int类型容器,存放输出结果while(!=que.e
- 二叉树展开为链表C++
给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。迭代法,创建了一个哨兵节点(先序遍历),用了栈,空间复杂度为O(n)classSolution{public:voidflatten(TreeNode*root){if(root==null
- C/C++Win32编程基础详解视频下载
择善Zach
编程C++Win32
课题视频:C/C++Win32编程基础详解
视频知识:win32窗口的创建
windows事件机制
主讲:择善Uncle老师
学习交流群:386620625
验证码:625
--
- Guava Cache使用笔记
bylijinnan
javaguavacache
1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。
2.Guava
- 解决ora-01652无法通过128(在temp表空间中)
0624chenhong
oracle
解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程
一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。
分析过程:
既然是temp表空间有问题,那当
- Struct在jsp标签
不懂事的小屁孩
struct
非UI标签介绍:
控制类标签:
1:程序流程控制标签 if elseif else
<s:if test="isUsed">
<span class="label label-success">True</span>
</
- 按对象属性排序
换个号韩国红果果
JavaScript对象排序
利用JavaScript进行对象排序,根据用户的年龄排序展示
<script>
var bob={
name;bob,
age:30
}
var peter={
name;peter,
age:30
}
var amy={
name;amy,
age:24
}
var mike={
name;mike,
age:29
}
var john={
- 大数据分析让个性化的客户体验不再遥远
蓝儿唯美
数据分析
顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。
分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。
然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实
- java笔记4
a-john
java
操作符
1,使用java操作符
操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。
操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的
- 从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序
aijuans
嵌入式学习
笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。
笔者因此写上自己的学习心得,希望能给和我一样转变
- 在springmvc中解决FastJson循环引用的问题
asialee
循环引用fastjson
我们先来看一个例子:
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import co
- ArrayAdapter和SimpleAdapter技术总结
百合不是茶
androidSimpleAdapterArrayAdapter高级组件基础
ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果
ArrayAdapter;的数据可以是数组或者是队列
// 获得下拉框对象
AutoCompleteTextView textview = (AutoCompleteTextView) this
- 九封信
bijian1013
人生励志
有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。 2014,写给人
- Linux下安装MySQL Web 管理工具phpMyAdmin
sunjing
PHPInstallphpMyAdmin
PHP http://php.net/
phpMyAdmin http://www.phpmyadmin.net
Error compiling PHP on CentOS x64
一、安装Apache
请参阅http://billben.iteye.com/admin/blogs/1985244
二、安装依赖包
sudo yum install gd
- 分布式系统理论
bit1129
分布式
FLP
One famous theory in distributed computing, known as FLP after the authors Fischer, Lynch, and Patterson, proved that in a distributed system with asynchronous communication and process crashes,
- ssh2整合(spring+struts2+hibernate)-附源码
白糖_
eclipsespringHibernatemysql项目管理
最近抽空又整理了一套ssh2框架,主要使用的技术如下:
spring做容器,管理了三层(dao,service,actioin)的对象
struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常
hibernate与数据库交互
BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说
MySql数据库
项目用eclipse
- treetable bug记录
braveCS
table
// 插入子节点删除再插入时不能正常显示。修改:
//不知改后有没有错,先做个备忘
Tree.prototype.removeNode = function(node) {
// Recursively remove all descendants of +node+
this.unloadBranch(node);
// Remove
- 编程之美-电话号码对应英语单词
bylijinnan
java算法编程之美
import java.util.Arrays;
public class NumberToWord {
/**
* 编程之美 电话号码对应英语单词
* 题目:
* 手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,
* 要求对一段数字,输出其代表的所有可能的字母组合
- jquery ajax读书笔记
chengxuyuancsdn
jQuery ajax
1、jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()
- JWFD工作流拓扑结构解析伪码描述算法
comsci
数据结构算法工作活动J#
对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析
/* 流程图拓扑结构解析伪码描述算法
public java.util.ArrayList DFS(String graphid, String stepid, int j)
- oracle I/O 从属进程
daizj
oracle
I/O 从属进程
I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会
- 高级排序:希尔排序
dieslrae
希尔排序
public void shellSort(int[] array){
int limit = 1;
int temp;
int index;
while(limit <= array.length/3){
limit = limit * 3 + 1;
- 初二下学期难记忆单词
dcj3sjt126com
englishword
kitchen 厨房
cupboard 厨柜
salt 盐
sugar 糖
oil 油
fork 叉;餐叉
spoon 匙;调羹
chopsticks 筷子
cabbage 卷心菜;洋白菜
soup 汤
Italian 意大利的
Indian 印度的
workplace 工作场所
even 甚至;更
Italy 意大利
laugh 笑
m
- Go语言使用MySQL数据库进行增删改查
dcj3sjt126com
mysql
目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种:
http://code.google.c...o-mysql-dri
- git命令
shuizhaosi888
git
---------------设置全局用户名:
git config --global user.name "HanShuliang" //设置用户名
git config --global user.email "
[email protected]" //设置邮箱
---------------查看环境配置
git config --li
- qemu-kvm 网络 nat模式 (四)
haoningabc
kvmqemu
qemu-ifup-NAT
#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
GATEWAY=192.168.122.1
NETMASK=255.255.255.0
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
- 不要让未来的你,讨厌现在的自己
jingjing0907
生活 奋斗 工作 梦想
故事one
23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。 24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙; 25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌
- 枚举类型详解
一路欢笑一路走
enum枚举详解enumsetenumMap
枚举类型详解
一.Enum详解
1.1枚举类型的介绍
JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。
Demo:一个最简单的枚举类
public enum ColorType {
RED
- 第11章 动画效果(上)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
ljf_home
eclipsejsp卡死js卡死
使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下:
1、取消验证
windows–>perferences–>validation
把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida
- MySQL编程中的6个重要的实用技巧
tomcat_oracle
mysql
每一行命令都是用分号(;)作为结束
对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如:
mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')");
- zoj 3820 Building Fire Stations(二分+bfs)
阿尔萨斯
Build
题目链接:zoj 3820 Building Fire Stations
题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。
解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多