- OpenHarmony鸿蒙开发( Beta5.0)轻量型系统服务管理部件详解
让开,我要吃人了
HarmonyOS鸿蒙开发OpenHarmonyharmonyos华为前端鸿蒙移动开发驱动开发OpenHarmony
系统服务框架基于面向服务的架构,提供了服务开发、服务的子功能开发、对外接口的开发、以及多服务共进程、进程间服务调用等开发能力。其中:M核:包含服务开发、服务的子功能开发、对外接口的开发以及多服务共进程的开发框架。A核:在M核能力基础之上,包含了进程间服务调用、进程间服务调用权限控制、进程间服务接口的开发等能力。开发跨进程间服务调用客户端代理定义IPC接口客户端代理:typedefstructDem
- 数据结构完全指南:C语言实现与核心原理剖析
南玖yy
数据结构c语言开发语言
引言:程序设计的骨架艺术在计算机科学的殿堂中,数据结构犹如建筑设计的钢筋骨架,决定着程序的运行效率与资源消耗。本文将以C语言为载体,深入解析七大核心数据结构,通过原理剖析、代码实现和复杂度分析三重视角,带您构建完整的数据结构知识体系。第一章:线性结构的基石1.1数组:内存的连续之美//动态数组实现typedefstruct{int*data;size_tcapacity;size_tsize;}D
- STM32常见外设的驱动示例和代码解析
HH予
嵌入式驱动工程项目开发stm32
以下是针对STM32常见外设的驱动示例和代码解析,基于HAL库实现,适用于大多数STM32系列(如F1/F4/H7等),可根据具体型号调整引脚和时钟配置。1.GPIO驱动应用场景:控制LED、按键检测、继电器开关等。示例代码://初始化LED(推挽输出)voidLED_Init(void){GPIO_InitTypeDefGPIO_Struct={
- STM32 HAL库 CAN_1
泠君
stm32arm嵌入式硬件
"can.c"#include"stdio.h"CAN_TxHeaderTypeDefmycan_tx;CAN_RxHeaderTypeDefmycan_rx;voidCANFilter_Config(void)//滤波{CAN_FilterTypeDefsFilterConfig;sFilterConfig.FilterBank=0;//CAN过滤器编号,范围0-27sFilterConfig.
- 蓝桥杯备考:堆算法之最小函数值
无敌大饺子 1
蓝桥杯算法职场和发展
这道题暴力解法就是把所有函数的前m个值代入算出来,然后把每个前m值的数组都合并起来,前m个就是我们的结果,当然这种做法是会超时的所以我们应该选择优先级队列,我们代入1把所有的值加入优先级队列,每次输出最小值,并且把该序列的第二个数代入进去加进队列,直到输出m个数结束#include#includeusingnamespacestd;constintN=1e5+10;typedeflonglongl
- PTA:顺序表操作集
悦悦子a啊
C语言PTA习题数据结构算法c语言
本题要求实现顺序表的操作集。函数接口定义:ListMakeEmpty();PositionFind(ListL,ElementTypeX);boolInsert(ListL,ElementTypeX,PositionP);boolDelete(ListL,PositionP);其中List结构定义如下:typedefintPosition;typedefstructLNode*List;struc
- C++ using 关键字总结(对比 typedef)
TsuanS
c++开发语言
C++using关键字总结(对比typedef)1.using与typedef的区别using是C++11引入的关键字,可用于类型别名、函数指针、模板别名和继承成员,相比typedef更清晰、功能更强大。特性typedefusing(推荐)基本类型别名✅支持✅支持(更简洁)函数指针别名✅支持✅支持(更清晰)指针类型别名✅支持✅支持(更直观)结构体别名✅支持✅支持(更简洁)STL容器别名✅支持✅支持
- 广工anyview数据结构第六章676869
L比8伯
数据结构
DC06PE67试写一非递归算法,在二叉查找树T中插入元素e。二叉查找树的类型BSTree定义如下typedefstructfKeyTypekey;//其他数据域TElemType;typedefstructBSTNodefTElemTypedata;structBSTNode*lchild,*rchild;BSTNode,*BSTree;实现下列函数StatusInsertBSTI(BSTree
- 【保姆级 HAL 库学习定时器】
CircuitWizard
单片机单片机嵌入式硬件
以下以STM32的HAL库为例,针对定时器(Timer)的初始化函数进行逐行详解,以定时器基本配置(TIMBase)为例:示例代码(以TIM6为例)TIM_HandleTypeDefhtim6;//定时器句柄voidMX_TIM6_Init(void){TIM_MasterConfigTypeDefsMasterConfig={0};htim6.Instance=TIM6;//选择定时器TIM6h
- 学生信息系统---手把手教你实现单链表的增删改查
小青龙emmm
c语言数据结构
一,定义学生信息结构体:/学生信息链表节点结构体typedefstructStuLinkList{charname[20];//学生姓名(最大20字符)charStuID[20];//学号(字符串类型)intage;//学生年龄doublescore;//学生成绩(浮点数)structStuLinkList*next;//指向下一个节点的指针}StuLinkList;二,单链表的初始化:/初始化链
- C语言优先队列作用,优先队列--C语言实现
CyberStar
C语言优先队列作用
优先队列--C语言实现向乔布斯致敬世界的今天因他而改变!世界的今天因他而多彩!JOBS优先队列--C语言实现/*binomial.h*/#ifndef_BINOMIAL_H_#define_BINOMIAL_H_typedeflongelement_type;#defineINFINITY(30000L)#defineMAX_TREES(14)#defineCAPACITY(16383)struc
- 优先队列——C语言实现
昆昆欧粑粑
c语言学习优先队列堆C语言
队列的特点是,先进先出。优先队列的特点是,进来的,根据优先次序,一个个出来。我们可以使用堆的思想来解决这个问题。代码:堆的实现参照:堆——用C语言实现,里面会用到头文件(包含堆):#define_CRT_SECURE_NO_WARNINGS1#include#include#includetypedefintHeapDataType;typedefstructMaxHeap{HeapDataTyp
- C语言指针修仙之几个牛波一的指针
Zach_yuan
C语言c语言开发语言
文章目录字符指针变量字符指针的一般使用字符指针的二般使用字符指针的究极使用数组指针变量数组指针是数组还是指针数组指针变量的初始化二维数组传参的本质函数指针变量函数地址函数指针两段逆天代码typedef关键字函数指针数组函数指针数组的定义转移表字符指针变量字符指针的一般使用我们看下面这块儿代码intmain(){charch='w';char*pc=&ch;*pc='a';printf("%c",*
- 2025天梯训练1
osir.
c++多关键字最短路
PTA|L3-1直捣黄龙30分思路:多关键字最短路,同时还要记录最短路径条数。typedefstructnode{intfrom,d,pass,kl;booloperatorx.d;if(pass!=x.pass)returnpassha;unordered_mapantHa;intenemys[205];intidx=0;vector>vct[205];intdis[205];//到达i城镇的最
- stm32 NVIC EXTI
每天学点
MCUstm32NVICEXTI
stm32NVICEXTINVICEXTI原理图main.cexti.hexti.cstm32f10x_it.cNVICNVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。配置中断的时候我们一般只用ISER、ICER和IP这三个寄存器,ISER用来使能中断,ICER用来失能中断,IP用来设置中断优先级。NVIC结构体定义如下。typedefstruc
- C语言_数据结构总结6:链式栈
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧
C语言—数据结构数据结构算法c语言开发语言visualstudiovisualstudio链表
纯c语言代码,不涉及C++顺序栈的实现,欢迎查看这篇文章:C语言_数据结构总结5:顺序栈-CSDN博客0.结构单元#include#includetypedefintElemType;typedefstructLinknode{ElemTypedata;//数据域structLinknode*next;//指针域}LinkStack;1.1初始化(返回头结点)推荐LinkStack*InitLin
- C语言共用体(union)
94大笨象吖
c语言算法开发语言
程序:#include"stdio.h"typedefunion{struct{unsignedcharD1;unsignedcharD2;unsignedcharD3;unsignedcharD4;unsignedcharD5;}u1_1;struct{unsignedcharD1;unsignedcharD2;unsignedcharD3;unsignedcharD4;unsignedchar
- 遍历二叉树——前序 中序 后序 层序
吧啦吧啦嘭
#数据结构c语言数据结构c++
//遍历二叉树#include#include#defineTElemTypeint#defineMAXSIZE9999typedefstructBiNode{TElemTypedata;structBiNode*lchild,*rchild;}BiTNode,*BiTree;BiNode*CreatBiT(){TElemTypech;BiTreeT;ch=getchar();if(ch=='#'
- 网络编程-day5-sqlite3数据库
Ryan_Gosling
数据库网络sqlite
思维导图服务器#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includetypedefstructsock
- 数据机构 C语言实现队列(含代码详解 易懂)
码上好玩
/*数学模型参照《大话数据结构》队列部分!!!取余运算实现队列循环!!!*/#include#include#include#include#defineOK1#defineERROR0#defineTURE1#defineFALSE0#defineMAXSIZE20/*队列最大的成员个数即数组的长度*/typedefintStatus;typedefintQElemType;/*循环队列的顺序存
- 深入理解指针
醉熏的蚂蚁
C语言c语言
在初步了解了指针的用法之后,我们可以想一想,既然一个变量有地址,而且在上一篇文章中我们知道了一个数组也有地址,那么函数、字符串这些东西有没有地址呢?如果有,那这些地址有什么用?我们又要怎样来使用这些地址?看了这篇文章,相信你对指针会有更深入的理解!目录字符指针变量数组指针变量二维数组传参的本质函数指针变量typedef关键字函数指针数组转移表字符指针变量在对指针有了一个初步的了解之后,我们知道了存
- C语言实现学生信息管理系统(详细注释)
半岛Hantou
c语言开发语言
学习B站up主C3程序猿的视频后总结分享【学生管理系统】_哔哩哔哩_bilibili【学生管理系统】https://www.bilibili.com/video/BV1uW411Q7Cf?spm_id_from=333.999.0.0#include#include#include//学生结点typedefstruct_STU{chararrStuName[20];chararrStuNum[10
- C++实现单链表的增删改查
ALAYI?
c++算法链表
#includeusingnamespacestd;//声明结构体typedefstructlnode{intdata;lnode*nex;}lnode,*LinkList;//最开始插入数据(直接调用版)LinkListTaiList(LinkListL){//尾插lnode*new_node,*Tail=L;//Tail=尾指针cout>data_x;while(data_x>0){cin>>
- 简单的C语言学生成绩管理系统
Wangawf
c语言开发语言
#include#include#include#include#include#defineMAX_STUDENTS1000#defineMAX_NAME_LEN50#defineMAX_ID_LEN20#defineMAX_SUBJECTS10#defineFILE_NAME"student_data.dat"//定义学生结构体typedefstruct{charid[MAX_ID_LEN];
- Day5 数据结构
Hhz2003
数据结构
Lin.h#ifndef__LIN_H__#define__LIN_H__#include#includetypedefintDateType;typedefstructnode{union{intlen;DateTypedate;};structnode*next;}Lin,*LinPtr;LinPtrcreate();//创建链表==创建头结点intempty();//判空//申请节点,封装数
- 考研408数据结构第四章(串)核心易错点与解题策略深度解析
竹木有心
考研408考研数据结构算法
一、串的存储结构易错点1.1定长顺序存储的边界处理定义:使用预定义长度的字符数组存储字符串,通常包含length字段或’\0’结束符易错场景://错误示例:未处理越界访问typedefstruct{charch[MAXSIZE];intlength;}SString;voidSubString(SString*sub,SStringS,intpos,intlen){sub->length=len;
- 代码贴——堆(二叉树)数据结构
头发尚存的猿小二
代码帖数据结构数据结构android
头文件Heap.h#pragmaonce#includetypedefintHPDataType;typedefstructHeap{HPDataType*a;intsize;intcapacity;}HP;voidHPInit(HP*php);voidHPDestory(HP*php);//出入后保持数据是堆voidHPPush(HP*php,HPDataTypex);HPDataTypeHPT
- Redis 源码分析-内部数据结构 intset
笨手笨脚の
#Redisredis数据结构setintset并差集
Redis源码分析-内部数据结构intsetintset是用于实现集合(set)这种对外的数据结构。它包含的元素无序,且不能重复。当插入的元素都是整形,底层使用intset存储,否则使用dict。intset结构和部分函数分析结构体定义如下://intset结构体typedefstructintset{uint32_tencoding;//数据编码,表示intset中的每个数据元素用几个字节(2、
- Linux----进程间的通信
weixin_51790712
linux运维服务器
进程间通信之信号:信号--软中断中断信号---中断源中断(信号)处理程序---负责对该中断(信号)做出反应的//信号处理函数的注册函数#includetypedefvoid(*sighandler_t)(int);sighandler_tsignal(intsignum,sighandler_thandler);功能:给signum信号设置一个信号处理函数参数:@signum要处理的信号@hand
- 蓝桥杯2020年第十一届省赛真题-I题-平面切分详细注释
shan1956
蓝桥杯平面
原题链接2873.平面切分-AcWing题库https://www.acwing.com/problem/content/description/2876/代码#include#include//stl:set容器头文件引用set不能添加已经存在的元素usingnamespacestd;typedefpairpdd;//typedef可以将一种数据类型定义为自己习惯的名称。setline;//pa
- 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 "13241153187@163.com" //设置邮箱
---------------查看环境配置
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节点最多