深度、广度优先搜索

2023-11-16

二、图的遍历

2.1 深度优先搜索(DFS)

DFS森林

Vertextype GetVex(ALGraph G, int v)
{
    return G.vertices[v].data;
}

void DFSTree(ALGraph G, int v, CSTree& T)
{
    int w, first;
    CSTree p, q=NULL;
    ArcNode* temp;
    visited[v] = TRUE;
    first = 1;
    temp = G.vertices[v].firstarc;
    while (temp != NULL)
    {
        w = temp->adjvex;
        if (visited[w] == 0)
        {
            p = (CSTree)malloc(sizeof(CSNode));
            p->e = GetVex(G, w);  //原"GetVex(G,v)";将v改为w即可
            p->lchild = NULL;
            p->nextsibling = NULL;
            if (first)
            {
                T->lchild = p; first = 0;
            }
            else
                q->nextsibling = p;
            q = p;
            DFSTree(G, w, q);
        }
        temp = temp->nextarc;
    }
}

void DFSForest(ALGraph G, CSTree& T)
{
    int v;
    CSTree p, q=NULL;
    T = NULL;
    for (v = 0; v < G.vexnum; v++)
        visited[v] = FALSE;
    for (v = 0; v < G.vexnum; v++)
    {
        if (!visited[v])
        {
            p = (CSTree)malloc(sizeof(CSNode));
            p->e = GetVex(G, v);
            p->lchild = NULL;
            p->nextsibling = NULL;
            if (!T) T = p;
            else    q->nextsibling = p;
            q = p;
            DFSTree(G, v, p);
        }
    }
}

应用

建立一无向图的邻接表存储结构,并构造其对应的深度优先搜索生成树或森林,按先序遍历该二叉链表,输出得到的序列

#include<stdio.h>
#include<stdlib.h>

#define TRUE 1                /*状态码预定义*/
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

#define MAX_VERTAX_NUM 20 //最大顶点个数
typedef char Vertextype;
//邻接表类型 
typedef struct ArcNode {
    int adjvex; //邻接点域 
    struct ArcNode* nextarc; //指向下一个邻接点的指针域 
}ArcNode;
//表头结点类型 
typedef struct VNode
{
    Vertextype data; //顶点域 
    ArcNode* firstarc; //边表头指针 
}VNode, AdjList[MAX_VERTAX_NUM];
//图的类型 
typedef struct
{
    AdjList vertices; //邻接表 
    int vexnum, arcnum; //顶点数 边数 
    //int kind;
}ALGraph;
typedef struct CSNode
{
    Vertextype e;
    CSNode* lchild, * nextsibling;
}CSNode, * CSTree;
int visited[MAX_VERTAX_NUM];

int LocateVex(ALGraph G, char e)
{
    int i;
    for (i = 0; i < G.vexnum; i++)
    {
        if (G.vertices[i].data == e)
            return i;
    }
    return -1;
}

void CreateUDG(ALGraph& G)
{
    int i, k, j;
    ArcNode* p, * s;
    char v1, v2;
//    printf("图的种类已默认为无向图\n");
//    G.kind = 1;
    printf("请输入顶点数和边数:(空格区分)");
    scanf("%d%d", &G.vexnum, &G.arcnum);
    getchar();
    printf("开始建立顶点表\n");
    for (i = 0; i < G.vexnum; i++)
    {
        printf("请输入第%d个顶点的信息:", i + 1);
        G.vertices[i].data = getchar();
        getchar();
        G.vertices[i].firstarc = NULL;
    }
    printf("建立边表\n");
    for (k = 0; k < G.arcnum; k++)
    {
        printf("请输入两个顶点(例:ab代表a~b):");
        scanf("%c%c", &v1, &v2);
        getchar();
        i = LocateVex(G, v1);
        j = LocateVex(G, v2);
        p = (ArcNode*)malloc(sizeof(ArcNode));
        p->adjvex = j;
        p->nextarc = G.vertices[i].firstarc;
        G.vertices[i].firstarc = p;
        s = (ArcNode*)malloc(sizeof(ArcNode));
        s->adjvex = i;
        s->nextarc = G.vertices[j].firstarc;
        G.vertices[j].firstarc = s;
    }
    printf("边表建立完成\n");
}
//打印邻接表
void DispGraph(ALGraph G)
{
    int i;
    printf("打印邻接表:\n");
    for (i = 0; i < G.vexnum; i++)
    {
        printf("%d->", i);
        while (1)
        {
            if (G.vertices[i].firstarc == NULL)
            {
                printf("^");
                break;
            }
            printf("%d->", G.vertices[i].firstarc->adjvex);
            G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc;
        }
        printf("\n");
    }
}

Vertextype GetVex(ALGraph G, int v)
{
    return G.vertices[v].data;
}

void DFSTree(ALGraph G, int v, CSTree& T)
{
    int w, first;
    CSTree p, q=NULL;
    ArcNode* temp;
    visited[v] = TRUE;
    first = 1;
    temp = G.vertices[v].firstarc;
    while (temp != NULL)
    {
        w = temp->adjvex;
        if (visited[w] == 0)
        {
            p = (CSTree)malloc(sizeof(CSNode));
            p->e = GetVex(G, w);  //原"GetVex(G,v)";将v改为w即可
            p->lchild = NULL;
            p->nextsibling = NULL;
            if (first)
            {
                T->lchild = p; first = 0;
            }
            else
                q->nextsibling = p;
            q = p;
            DFSTree(G, w, q);
        }
        temp = temp->nextarc;
    }
}

void DFSForest(ALGraph G, CSTree& T)
{
    int v;
    CSTree p, q=NULL;
    T = NULL;
    for (v = 0; v < G.vexnum; v++)
        visited[v] = FALSE;
    for (v = 0; v < G.vexnum; v++)
    {
        if (!visited[v])
        {
            p = (CSTree)malloc(sizeof(CSNode));
            p->e = GetVex(G, v);
            p->lchild = NULL;
            p->nextsibling = NULL;
            if (!T) T = p;
            else    q->nextsibling = p;
            q = p;
            DFSTree(G, v, p);
        }
    }
}

void PreOrderTraverse(CSTree T)
{
    if (T == NULL)   return;
    printf("%c", T->e);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->nextsibling);
}

int main()
{
    ALGraph G;  //图
    CSTree T;   //树
    CreateUDG(G);  //建图
    DispGraph(G);  //画表
    DFSForest(G, T);  //种树
    printf("先序遍历开始\n");
    PreOrderTraverse(T);  //先序遍历
    system("pause");
    return 0;
}

2.2 广度优先搜索(BFS)

基本操作

int FirstAdjVex(MGraph G, int v)
{
	int i;
	for (i = 0; i < G.vexnum; i++)
	{
		if (G.arcs[v][i] == 1)
			return i;
	}
	return -1;
}

int NextAdjVex(MGraph G, int u, int w)
{
	for (int i = w + 1; i < G.vexnum; i++)
	{
		if (G.arcs[u][i] == 1)
			return i;
	}
	return -1;
}
void BFSTraverse(MGraph G)
{
	SqQueue Q;
	int v, u, w, visited[MAX_VERTAX_NUM];
	for (v = 0; v < G.vexnum; ++v)
		visited[v] = FALSE;
	InitQueue(Q);
	for (v = 0; v < G.vexnum; v++)
	{
		if (!visited[v]) //尚未访问
		{
			visited[v] = TRUE; //访问并标记
			cout << G.vexs[v]; //遍历 输出
			EnQueue(Q, v); //v 入队
			while (!QueueEmpty(Q))
			{
				DeQueue(Q, u); //队头元素出队并置为u
				for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)) //遍历边
				{
					if (!visited[w])
					{
						visited[w] = TRUE;
						cout << G.vexs[w];
						EnQueue(Q, w);
					}
				}
			}
		}
	}
	cout << "广度优先搜索完成" << endl;
}

应用

#include <iostream>
using namespace std;

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1 //不可执行

#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define MAXQSIZE 100 //最大队列长度

typedef int QElemType;
typedef int Status;


#define MAX_VERTAX_NUM 20 //最大顶点个数
#define INFINITYA 99999999

typedef char VertexType;
typedef int VRType;
typedef int InfoType;

typedef int AdjMatrix;
typedef int QElemtype;


/*--------单链队列-队列的顺序存储结构--------*/
/*线性表的单链表的存储结构*/
typedef struct QNode {
	QElemType* base;
	int front;
	int rear;
}SqQueue;


Status InitQueue(SqQueue& Q) {
	Q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));
	if (!Q.base)
		exit(OVERFLOW);
	Q.front = Q.rear = 0;
	return OK;
}

int QueueLength(SqQueue Q) {
	return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}

/*插入元素e为Q的新的队尾元素*/
Status EnQueue(SqQueue& Q, QElemType e) {
	if ((Q.rear + 1) % MAXQSIZE == Q.front)
		return ERROR;
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAXQSIZE;
	return OK;
}

/*若队列不为空则删除Q的队头元素,用e返回其值,并返回ok;否则返回ERROR*/
Status DeQueue(SqQueue& Q, QElemType& e) {
	if (Q.front == Q.rear)
		return ERROR;
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXQSIZE;
	return OK;
}
/*判断队列是否为空*/
Status QueueEmpty(SqQueue Q) {
	if (Q.front == Q.rear)
		return TRUE;
	else
		return FALSE;
}


//邻接矩阵
typedef struct
{
	VertexType vexs[MAX_VERTAX_NUM];
	AdjMatrix arcs[MAX_VERTAX_NUM][MAX_VERTAX_NUM];
	int vexnum, arcnum;
}MGraph;

int LocateVex(MGraph G, VertexType e)
{
	int i;
	for (i = 0; i < G.vexnum; i++)
	{
		if (G.vexs[i] == e)
			return i;
	}
	return -1;
}

Status CreateDG(MGraph& G)
{
	int i, j, k;
	char v1, v2;
	cout << "请输入图的顶点个数(vexnum),边数(arcnum)";
	cin >> G.vexnum >> G.arcnum;
	getchar();
	cout << "请输入顶点(例:abcd):";
	for (i = 0; i < G.vexnum; i++)
		G.vexs[i] = getchar();
	getchar();

	for (i = 0; i < G.vexnum; i++)
		for (j = 0; j < G.vexnum; j++)
			G.arcs[i][j] = INFINITYA;

	for (k = 0; k < G.arcnum; k++)
	{
		cout << k;
		cout << "请输入两个顶点:";
		cin >> v1 >> v2;
		getchar();
		i = LocateVex(G, v1);
		j = LocateVex(G, v2);
		G.arcs[i][j] = 1;
	}
	return OK;
}


int FirstAdjVex(MGraph G, int v)
{
	int i;
	for (i = 0; i < G.vexnum; i++)
	{
		if (G.arcs[v][i] == 1)
			return i;
	}
	return -1;
}

int NextAdjVex(MGraph G, int u, int w)
{
	for (int i = w + 1; i < G.vexnum; i++)
	{
		if (G.arcs[u][i] == 1)
			return i;
	}
	return -1;
}
void BFSTraverse(MGraph G)
{
	SqQueue Q;
	int v, u, w, visited[MAX_VERTAX_NUM];
	for (v = 0; v < G.vexnum; ++v)
		visited[v] = FALSE;
	InitQueue(Q);
	for (v = 0; v < G.vexnum; v++)
	{
		if (!visited[v]) //尚未访问
		{
			visited[v] = TRUE; //访问并标记
			cout << G.vexs[v]; //遍历 输出
			EnQueue(Q, v); //v 入队
			while (!QueueEmpty(Q))
			{
				DeQueue(Q, u); //队头元素出队并置为u
				for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)) //遍历边
				{
					if (!visited[w])
					{
						visited[w] = TRUE;
						cout << G.vexs[w];
						EnQueue(Q, w);
					}
				}
			}
		}
	}
	cout << "广度优先搜索完成" << endl;
}



int main() {
	MGraph G;
	CreateDG(G);
	BFSTraverse(G);   

	return 0;
}

···
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度、广度优先搜索 的相关文章

  • 7-33 地下迷宫探索 (30 分)(思路加详解)

    一 题目 7 33 地下迷宫探索 30 分 地道战是在抗日战争时期 在华北平原上抗日军民利用地道打击日本侵略者的作战方式 地道网是房连房 街连街 村连村的地下工事 如下图所示 我们在回顾前辈们艰苦卓绝的战争生活的同时 真心钦佩他们的聪明才智
  • [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS

    目录 1 Binary Tree Level Order Traversal 二叉树层次遍历 BFS 2 Binary Tree Level Order Traversal II 二叉树层次遍历从低往高输出 BFS 3 Maximum De
  • 【2019年ICPC南昌网络赛】Distance on the tree【DFS+线段树合并(可持久化线段树)】

    题目链接 DSM Data Structure Master once learned about tree when he was preparing for NOIP National Olympiad in Informatics i
  • 组合、子集问题汇总

    子集的问题的思路也分两个方向 一种是解空间树是关于每个数选还是不选 结点取值范围就是true or false 解向量的长度是固定的 即candidates的个数 而且只有完全解才是问题的解 解向量不是直接的答案 而是标志每个candida
  • 图的深度优先遍历

    深度优先查找 原理 深度优先搜索可以从图的任意顶点开始 然后把该顶点标记为已经访问 每次迭代的时候 深度搜索紧接着处理与当前顶点邻接的未访问顶点 如果有若干个顶点 则任意选择一个 也可以按自己的条件选择 让这个过程一直持续 直到遇到一个终点
  • HDU--1242:Rescue (BFS)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1242 2 易错点 可能存在多个朋友 即多个map 中有多个 r 所以起始点为Angel的位置 最短时间为到达最近的朋友的时间 3 源代码 H
  • 基础算法题——迷宫(递推)

    迷宫 题目链接 解题思路 暴力法 利用 dfs 遍历每一条可能的路径 将遍历的权值和不断取余 不足 当 n m 取较大的情况下 所遍历的路径可能会暴增 出现超时的情况 递推法 从题目上我们可以发现 最终的权值和是要对 mod 取余的 利用这
  • CMake:递归检查并拷贝所有需要的DLL文件

    文章目录 1 目的 2 设计 整体思路 多层依赖的处理 获取 DLL 所在目录 探测剩余的 DLL 文件 3 代码实现 判断 stack 是否为空 判断 stack 是否为空 获取所有 target 检测并拷贝 DLL 4 使用 1 目的
  • DFS(深度优先遍历)解题思路

    DFS主要可以用于解决三种问题 1 可达性 连通性问题 LeetCode上适用题目 695 查找最大的连通面积 200 矩阵中的连通分量数目 547 好友关系的连通分量数目 130 填充封闭区域 417 能到达的太平洋和大西洋的区域 2 排
  • 蓝桥杯2023年第十四届省赛-飞机降落

    题目描述 N 架飞机准备降落到某个只有一条跑道的机场 其中第 i 架飞机在 Ti 时刻到达机场上空 到达时它的剩余油料还可以继续盘旋 Di 个单位时间 即它最早 可以于 Ti 时刻开始降落 最晚可以于 Ti Di 时刻开始降落 降落过程需要
  • 剑指offer.13.机器人的运动范围之DFS、BFS搜索

    机器人的运动范围 前言 一 DFS 1 思想 2 源码 二 BFS 1 源码 2 改进源码BFS 总结 前言 对于矩阵搜索问题 就像图的搜索一样 熟练掌握DFS BFS是关键 一 DFS 1 思想 通过DFS去寻找满足条件的格子 而已经访问
  • 数据结构与算法(三):栈与队列

    一 栈 1 基本概念 2 栈的顺序存储结构 3 两栈共享空间 4 栈的链式存储结构 5 栈的应用 递归 二 队列 1 基本概念 2 队列的顺序存储结构 三 总结 上一篇 数据结构与算法 二 线性表 中介绍了数据结构中线性表的两种不同实现 顺
  • 算法提高 最长滑雪道(动态规划 + Dfs)

    试题 算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区
  • [Codeforces 1286B] Numbers on Tree

    Evlampiy was gifted a rooted tree The vertices of the tree are numbered from 1 to n Each of its vertices also has an int
  • Codeforces-1454E Number of Simple Paths(基环树-思维)

    题目大意 给你n个点 n条边 求图中简单路径的个数 题目思路 n个点n条边 那么图中一定有一个环 拿这个图来讲 我们将两点间的关系分为4种 1 两点都在环上 简单路径的个数为2 例如2与5 2 一个点在环上一个点不在环上 简单路径个数为2
  • 不同岛屿的数量

    694 不同岛屿的数量 这道题要给出不同岛屿的数量 最直观的想法就是对发现的不同岛屿进行序列化 然后把序列化结果存到HashSet 那怎么序列化呢 其实比较类似于二叉树的序列化 记录遍历顺序 方向 这里用 1 2 3 4 代表上下左右 1
  • 每天进步一点点【图的深度优先遍历(DFS)】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • 题目 1548: [蓝桥杯][算法提高VIP]盾神与砝码称重

    时间限制 1Sec 内存限制 128MB 提交 782 解决 331 题目描述 有一天 他在宿舍里无意中发现了一个天平 这 个天平很奇怪 有n个完好的砝码 但是没有游码 盾神为他的发现兴奋不已 于是他准备去称一称自己的东西 他准备好了m种物
  • POJ 2676 Sudoku 数独(dfs)

    POJ 2676 Sudoku 数独 dfs Sudoku is a very simple task A square table with 9 rows and 9 columns is divided to 9 smaller squ
  • 数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

    树的概念 首先 树是一种常用的非线性数据结构 是以边 Edge 相连的节点 Node 的集合 每个节点存储对应的值 当存在子节点时与之相连 根节点 是树的首个节点 边 所有节点都由边相连 用于标识节点间的关系 叶子结点 树的末端节点 它们没

随机推荐

  • ceph分布式存储-常见MON故障处理

    1 常见 MON 故障处理 Monitor 维护着 Ceph 集群的信息 如果 Monitor 无法正常提供服务 那整个 Ceph 集群就不可访问 一般来说 在实际运行中 Ceph Monitor的个数是 2n 1 n gt 0 个 在线上
  • [转]边界值法中的上点、内点和离点的定义

    上点 是指边界上的点 无论此时的域是开区间还是闭区间 开区间的话 上点就是在域外 闭区间的话 上点就是在域内 离点 是指离上点最近的点 这里就跟是闭区间还是开区间就有关系了 如果是开区间 那么离点就在域内 如果是闭区间 那么离点就在域外 内
  • TCP的keep-alive机制分析

    TCP中的keep alive机制 问题和解决思路 详细内容 缺陷分析 问题和解决思路 建立tcp连接后 双方互相发送信息 但是可能存在的情况是双方在处理数据 暂时并不会互相发送数据 那么这个时候如何判断双方连接是否依然正常 而没有意外断开
  • Python Using EXE

    OS This method has its disadvantage if we want to stop this process We need do it by ourselves except seize the terminal
  • 启动nacos时出现“nacos is starting with cluster”问题

    使用startup cmd命令启动是以集群方式启动nacos 可以看见命令行中有 nacos is starting with cluster 我们可以以单机方式启动nacos 执行以下命令 startup cmd m standalone
  • MySql导入导出数据库(含远程导入导出)

    一 导入导出本地数据库 导出 1 先运行cmd cd 到mysql安装目录中的bin文件夹 2 mysqldump u root p 数据库名 gt 导出文件名 sql 其他情况下 1 导出整个数据库 mysqldump u 用户名 p 数
  • 2023华为od机试 Java 实现【德州扑克】

    前言 本题使用Java解答 如果需要Python代码 请参考以下链接 链接 题目 我们可以选择五张牌 它们的范围是 每张牌的大小在2 10之间 或者字母J Q K A 牌花色为红桃 黑桃 梅花 方块四种花色之一 现在一共有6种牌型 牌型1
  • 最新的ARM-GCC下载安装指南

    GCC下载网址 https developer arm com tools and software open source software developer tools gnu toolchain gnu a downloads 我使
  • 搭建一个属于自己的个人网站怎样选择服务器

    不管是想搭建一个属于自己的个人网站 还是想开发一个企业项目上云 都必须拥有一台云服务器 云服务器是公有云的支柱之一 我用过很多大厂的云服务器 还记得读研期间我刚开始入门的时候 自己尝试搭建了一台云服务器建网站 后来在一个导师项目中刚好需要用
  • 双指针笔记

    双指针是在一次for循环中使用两个指针完成需要两个for循环的工作 其主要有两种方法 快慢双指针 从一端开始 设置两个速度不一样的指针进行遍历 public int removeElement int nums int val int fa
  • 关于C++中void*形参兼容问题,血的教训!

    关于C 中void 形参兼容问题 血的教训 C语言中void 作为形参的用法 C 中void 作为形参的用法 C语言中void 作为形参的用法 最近在实操一本算法书上的代码的时候 碰到了形如int comp void void 这样的形参列
  • 一种通用代码模型的构建与实现

    开发思路 总体开发思路 代码解析 需要考虑的问题是 目前已经实现了70 左右的功能 代码片段的内在结构 识别代码片段中所存在的对象元素 系统根据不同的对象元素的分类能快速执行相应的处理程序 将处理的结果进行传递 将处理过程进行缓存 保留代码
  • 程设课终章:c++使用socket实现bmp图片的传输

    特别鸣谢 44条消息 C UDP发送接收文件 BMP 我不在你不在的博客 CSDN博客 里面一些概念 ip地址 电脑门牌号 端口号 做这件事的行动代号 协议 接收方和发送方都必须遵守的一种规则 socket是基于tcp ip协议发送数据技术
  • 【vue其他相关】欢迎讨论!异步请求放在生命周期中的created还是mounted,已填坑

    文章目录 前言 两个生命周期 场景1 场景2 场景3 结论 如何处理场景一和场景二的问题 最后 前言 曾经在百度上搜这个问题 看到的答案都是相互复制粘贴的 而且个人觉得并没具体场景举例说明 并没有好的答案 于是自己立贴 留下这个坑 等日后遇
  • vue循环生成div

    遇到了一个需求 需要展示一年12个月的日历 然后一行为一个div 需要循环生成4个div 刚开始我查了一下 不知道怎么入手 然后问了我一个做前端的同学 一分钟就解决了 代码如下 div div div style width 500px b
  • pb 判断timer是否在执行_FreeRTOS 之 Timer

    在 FreeRTOS 之任务调度 一文中提到 硬件定时器是和硬件设计相关的 不同的芯片有不同的配置方法 通过中断方式触发执行 精确度高 相对于硬件定时器 FreeRTOS 中还提供了软件定时器 本文就来聊聊软件定时器是如何实现的 以及它的精
  • 类加载器的父委托机制

    类加载器 类加载器用来把类加载到Java虚拟机中 类加载器的类型 有两种类型的类加载器 1 JVM自带的加载器 根类加载器 Bootstrap 扩展类加载器 Extension 系统类加载器 System 2 用户自定义的类加载器 java
  • spring异常Unsatisfied dependency expressed through constructor parameter 0

    异常信息 org springframework beans factory UnsatisfiedDependencyException Error creating bean with name xxx defined in file
  • 程序员如何在浏览器上面去做p图软件的事

    在浏览器中更改内容除了箭头点击元素进行更改还有另一种更快捷的方法 首先随便打开一个浏览器 按f12 打开控制台 在控制台内输入一下代码回车 document designMode on 开启这个网站修改模式之后你就可以随心所欲地去更改网站的
  • 深度、广度优先搜索

    文章目录 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 应用 2 2 广度优先搜索 BFS 基本操作 应用 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 Vertextype GetVex ALGraph G int v