蓝桥杯C语言组:图论问题
蓝桥杯C语言组图论问题研究
摘要
图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用,通过具体实例和表格,详细解释了图论问题的解题思路和实现方法,旨在为参赛选手提供参考和指导。

一、引言
蓝桥杯全国软件和信息技术专业人才大赛是国内知名的IT类竞赛,其中C语言组竞赛备受高校学生的关注和参与。图论作为计算机科学中的经典理论,广泛应用于网络设计、路径规划、资源分配等领域。在蓝桥杯C语言组竞赛中,图论问题的考察不仅测试选手对图论知识的掌握程度,还考察其编程实现能力。因此,深入研究图论问题及其解题方法对于提高竞赛成绩具有重要意义。
二、图论基础
(一)图的基本概念
图是一种由顶点(节点)和边(或弧)组成的离散结构,用于表示对象之间的关系。图可以分为无向图和有向图。无向图中的边没有方向,表示两个顶点之间的对称关系;有向图中的边有方向,表示从一个顶点指向另一个顶点的关系。
| 术语 | 定义 |
|---|---|
| 顶点(Vertex) | 图中的基本元素,表示对象 |
| 边(Edge) | 连接两个顶点的线段,表示对象之间的关系 |
| 度(Degree) | 与一个顶点相连的边的数量 |
| 路径(Path) | 从一个顶点到另一个顶点的边的序列 |
| 连通性(Connectivity) | 图中任意两个顶点之间是否存在路径 |
(二)图的存储结构
在计算机中,图可以通过邻接矩阵、邻接表等数据结构来存储。
-
邻接矩阵:用一个二维数组表示图的顶点之间的关系。对于无向图,邻接矩阵是对称的;对于有向图,邻接矩阵不一定对称。邻接矩阵的优点是实现简单,判断两个顶点之间是否存在边的时间复杂度为O(1),但缺点是空间复杂度较高,尤其是对于稀疏图。
-
邻接表:用一个数组存储图的顶点,每个顶点对应一个链表,链表中的节点表示与该顶点相连的边。邻接表的优点是节省空间,适合稀疏图,但判断两个顶点之间是否存在边的时间复杂度较高。
三、图论算法
(一)最短路径算法
最短路径问题是图论中的经典问题,目标是找到从一个顶点到另一个顶点的最短路径。常见的最短路径算法包括Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。
1. Dijkstra算法
Dijkstra算法用于求解单源最短路径问题,即从一个起点到所有其他顶点的最短路径。算法的基本思想是通过贪心策略逐步扩展已知的最短路径集合。Dijkstra算法的时间复杂度为O(V^2),其中V是顶点的数量。通过使用优先队列优化,时间复杂度可以降低到O(VlogV)。
2. Floyd-Warshall算法
Floyd-Warshall算法用于求解所有顶点对之间的最短路径。算法的核心思想是动态规划,通过逐步考虑每个顶点作为中间点来更新路径长度。Floyd-Warshall算法的时间复杂度为O(V^3),适用于顶点数量较少的图。
(二)最小生成树算法
最小生成树是图论中的另一个重要问题,目标是在一个连通图中找到一棵包含所有顶点的生成树,使得树的边权总和最小。常见的最小生成树算法包括Prim算法和Kruskal算法。
1. Prim算法
Prim算法从一个顶点开始,逐步扩展生成树,每次选择与当前生成树相连的最小边。Prim算法的时间复杂度为O(V^2),通过使用优先队列优化,时间复杂度可以降低到O(VlogV)。
2. Kruskal算法
Kruskal算法通过选择最小的边逐步构建生成树,同时避免形成环。Kruskal算法的时间复杂度主要取决于边的排序,通常为O(ElogE),其中E是边的数量。
(三)深度优先搜索(DFS)与广度优先搜索(BFS)
DFS和BFS是图论中的两种基本搜索算法,广泛应用于路径搜索、连通性判断等问题。
1. 深度优先搜索(DFS)
DFS从一个顶点开始,沿着路径尽可能深地搜索,直到无法继续为止,然后回溯。DFS通常使用递归实现,时间复杂度为O(V + E),其中V是顶点数量,E是边的数量。
2. 广度优先搜索(BFS)
BFS从一个顶点开始,依次访问所有相邻顶点,然后再从这些相邻顶点开始,依次访问它们的相邻顶点。
(四)实例分析
1. 最短路径问题
假设有一个图,顶点集合为{A, B, C, D, E},边集合为{(A, B, 1), (A, C, 4), (B, C, 2), (B, D, 5), (C, D, 1), (C, E, 3), (D, E, 2)},其中每个元组表示边的起点、终点和权重。使用Dijkstra算法求解从顶点A到其他所有顶点的最短路径。
| 步骤 | 当前顶点 | 距离集合 | 已访问集合 |
|---|---|---|---|
| 1 | A | {A: 0, B: 1, C: 4, D: ∞, E: ∞} | {A} |
| 2 | B | {A: 0, B: 1, C: 3, D: 6, E: ∞} | {A, B} |
| 3 | C | {A: 0, B: 1, C: 3, D: 4, E: 6} | {A, B, C} |
| 4 | D | {A: 0, B: 1, C: 3, D: 4, E: 6} | {A, B, C, D} |
| 5 | E | {A: 0, B: 1, C: 3, D: 4, E: 6} | {A, B, C, D, E} |
最终,从顶点A到其他顶点的最短路径分别为:A到B为1,A到C为3,A到D为4,A到E为6。
2. 最小生成树问题
假设有一个图,顶点集合为{A, B, C, D, E},边集合为{(A, B, 1), (A, C, 4), (B, C, 2), (B, D, 5), (C, D, 1), (C, E, 3), (D, E, 2)},使用Kruskal算法求解最小生成树。
| 步骤 | 边集合 | 是否加入 | 原因 |
|---|---|---|---|
| 1 | (A, B, 1) | 是 | 不形成环 |
| 2 | (C, D, 1) | 是 | 不形成环 |
| 3 | (B, C, 2) | 是 | 不形成环 |
| 4 | (D, E, 2) | 是 | 不形成环 |
| 5 | (C, E, 3) | 否 | 形成环 |
| 6 | (A, C, 4) | 否 | 形成环 |
| 7 | (B, D, 5) | 否 | 形成环 |
最终,最小生成树的边集合为{(A, B, 1), (C, D, 1), (B, C, 2), (D, E, 2)}。
四、结论
图论是蓝桥杯C语言组竞赛中的重要内容,掌握图论的基本概念和常见算法对于参赛选手来说至关重要。通过实例分析和表格解释,本文详细介绍了图论问题的解题思路和实现方法,希望对参赛选手有所帮助。
以下是几个关于图论问题的例题及其解决代码,涵盖常见的图论算法,如Dijkstra算法、Floyd-Warshall算法、拓扑排序等,适用于蓝桥杯C语言组竞赛的备考。
例题1:单源最短路径问题(Dijkstra算法)
问题描述:给定一个带权有向图,求从某个源点到所有其他顶点的最短路径。
C语言实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // For INT_MAX#define V 5 // 假设图中有5个顶点// 找到距离最小且未被访问的顶点
int minDistance(int dist[], int sptSet[], int n) {int min = INT_MAX, min_index;for (int v = 0; v < n; v++)if (sptSet[v] == 0 && dist[v] <= min)min = dist[v], min_index = v;return min_index;
}// Dijkstra算法实现
void dijkstra(int graph[V][V], int src) {int dist[V]; // dist[i] 会保存源顶点到顶点i的最短路径int sptSet[V]; // sptSet[i] 为真 (1) 时表示该顶点i已在最短路径树中或最短距离已确定// 初始化所有距离为无穷大,sptSet[]为假for (int i = 0; i < V; i++)dist[i] = INT_MAX, sptSet[i] = 0;dist[src] = 0; // 源顶点到自身的距离总是为0for (int count = 0; count < V - 1; count++) {int u = minDistance(dist, sptSet, V);sptSet[u] = 1; // 将选定的顶点标记为已处理// 更新相邻顶点的距离值for (int v = 0; v < V; v++)if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX&& dist[u] + graph[u][v] < dist[v])dist[v] = dist[u] + graph[u][v];}// 打印结果printf("Vertex \t Distance from Source\n");for (int i = 0; i < V; i++)printf("%d \t\t %d\n", i, dist[i]);
}int main() {int graph[V][V] = {{ 0, 6, 0, 1, 0 },{ 6, 0, 5, 2, 2 },{ 0, 5, 0, 0, 5 },{ 1, 2, 0, 0, 1 },{ 0, 2, 5, 1, 0 }};dijkstra(graph, 0); // 假设从顶点0开始return 0;
}
说明:该代码实现了Dijkstra算法,用于求解单源最短路径问题。
例题2:所有顶点对的最短路径问题(Floyd-Warshall算法)
问题描述:给定一个带权图,求图中所有顶点对之间的最短路径。
C语言实现代码:
#include <stdio.h>
#include <limits.h> // For INT_MAX#define V 4 // 假设图中有4个顶点void printSolution(int dist[][V]);void floydWarshall(int graph[][V]) {int dist[V][V], i, j, k;// 初始化距离矩阵for (i = 0; i < V; i++)for (j = 0; j < V; j++)dist[i][j] = graph[i][j];// 计算所有顶点对的最短路径for (k = 0; k < V; k++) {for (i = 0; i < V; i++) {for (j = 0; j < V; j++) {if (dist[i][k] + dist[k][j] < dist[i][j])dist[i][j] = dist[i][k] + dist[k][j];}}}// 打印结果printSolution(dist);
}void printSolution(int dist[][V]) {printf("The following matrix shows the shortest distances between every pair of vertices:\n");for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {if (dist[i][j] == INT_MAX)printf("%7s", "INF");elseprintf("%7d", dist[i][j]);}printf("\n");}
}int main() {int graph[V][V] = {{ 0, 5, INT_MAX, 10 },{ INT_MAX, 0, 3, INT_MAX },{ INT_MAX, INT_MAX, 0, 1 },{ INT_MAX, INT_MAX, INT_MAX, 0 }};floydWarshall(graph);return 0;
}
说明:该代码实现了Floyd-Warshall算法,用于求解所有顶点对之间的最短路径。
例题3:拓扑排序(Kahn算法)
问题描述:给定一个有向无环图(DAG),对图中的顶点进行拓扑排序。
C语言实现代码:
#include <stdio.h>
#include <stdlib.h>#define V 6 // 假设图中有6个顶点void topologicalSort(int adj[][V], int inDegree[], int result[]) {int count = 0;int queue[V], front = 0, rear = 0;// 初始化队列,将所有入度为0的顶点入队for (int i = 0; i < V; i++) {if (inDegree[i] == 0) {queue[rear++] = i;}}while (front < rear) {int u = queue[front++];result[count++] = u;// 遍历所有邻接点,减少其入度for (int v = 0; v < V; v++) {if (adj[u][v]) {if (--inDegree[v] == 0) {queue[rear++] = v;}}}}if (count != V) {printf("There exists a cycle in the graph\n");}
}int main() {int adj[V][V] = {{0, 1, 1, 0, 0, 0},{0, 0, 0, 1, 0, 0},{0, 0, 0, 1, 0, 0},{0, 0, 0, 0, 1, 1},{0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0}};int inDegree[V] = {0};for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {inDegree[i] += adj[j][i];}}int result[V];topologicalSort(adj, inDegree, result);printf("Topological Sort: ");for (int i = 0; i < V; i++) {printf("%d ", result[i]);}printf("\n");return 0;
}
说明:该代码实现了Kahn算法,用于对有向无环图进行拓扑排序。
例题4:最小生成树(Prim算法)
问题描述:给定一个无向连通图,求该图的最小生成树。
C语言实现代码:
#include <stdio.h>
#include <limits.h> // For INT_MAX#define V 5 // 假设图中有5个顶点int minKey(int key[], int mstSet[], int n) {int min = INT_MAX, min_index;for (int v = 0; v < n; v++)if (mstSet[v] == 0 && key[v] < min)min = key[v], min_index = v;return min_index;
}void primMST(int graph[V][V]) {int parent[V]; // 存储最小生成树的构建过程int key[V]; // key[i]保存顶点i到最小生成树的最小权重int mstSet[V]; // mstSet[i]为真(1)时表示该顶点i已在最小生成树中for (int i = 0; i < V; i++)key[i] = INT_MAX, mstSet[i] = 0;key[0] = 0; // 从顶点0开始parent[0] = -1;for (int i = 0; i < V - 1; i++) {int u = minKey(key, mstSet, V);mstSet[u] = 1;for (int v = 0; v < V; v++)if (graph[u][v] && mstSet[v] == 0 && graph[u][v] < key[v])parent[v] = u, key[v] = graph[u][v];}printf("Edge \tWeight\n");for (int i = 1; i < V; i++)printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]);
}int main() {int graph[V][V] = {{ 0, 2, 0, 6, 0 },{ 2, 0, 3, 8, 5 },{ 0, 3, 0, 0, 7 },{ 6, 8, 0, 0, 9 },{ 0, 5, 7, 9, 0 }};primMST(graph);return 0;
}
说明:该代码实现了Prim算法,用于求解无向连通图的最小生成树。
例题5:深度优先搜索(DFS)与连通分量
问题描述:给定一个无向图,使用深度优先搜索(DFS)找出图中的所有连通分量。
C语言实现代码:
#include <stdio.h>
#include <stdlib.h>#define V 5 // 假设图中有5个顶点void DFS(int adj[][V], int visited[], int v) {visited[v] = 1;printf("%d ", v);for (int i = 0; i < V; i++) {if (adj[v][i] && !visited[i]) {DFS(adj, visited, i);}}
}void findConnectedComponents(int adj[][V], int visited[]) {for (int i = 0; i < V; i++) {if (!visited[i]) {DFS(adj, visited, i);printf("\n");}}
}int main() {int adj[V][V] = {{0, 1, 0, 0, 0},{1, 0, 1, 0, 0},{0, 1, 0, 1, 0},{0, 0, 1, 0, 1},{0, 0, 0, 1, 0}};int visited[V] = {0};printf("Connected components:\n");findConnectedComponents(adj, visited);return 0;
}
说明:该代码实现了深度优先搜索(DFS),用于找出无向图中的所有连通分量。
例题6:广度优先搜索(BFS)与最短路径
问题描述:给定一个无权图,使用广度优先搜索(BFS)找出从源点到所有其他顶点的最短路径。
C语言实现代码:
#include <stdio.h>
#include <stdlib.h>#define V 6 // 假设图中有6个顶点void BFS(int adj[][V], int src, int dist[]) {int visited[V] = {0};int queue[V], front = 0, rear = 0;visited[src] = 1;dist[src] = 0;queue[rear++] = src;while (front < rear) {int u = queue[front++];for (int v = 0; v < V; v++) {if (adj[u][v] && !visited[v]) {visited[v] = 1;dist[v] = dist[u] + 1;queue[rear++] = v;}}}
}int main() {int adj[V][V] = {{0, 1, 1, 0, 0, 0},{1, 0, 0, 1, 0, 0},{1, 0, 0, 1, 0, 0},{0, 1, 1, 0, 1, 1},{0, 0, 0, 1, 0, 0},{0, 0, 0, 1, 0, 0}};int dist[V];BFS(adj, 0, dist);printf("Shortest distances from source vertex 0:\n");for (int i = 0; i < V; i++) {printf("Vertex %d: %d\n", i, dist[i]);}return 0;
}
说明:该代码实现了广度优先搜索(BFS),用于找出无权图中从源点到所有其他顶点的最短路径。
相关文章:
蓝桥杯C语言组:图论问题
蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…...
windows通过网络向Ubuntu发送文件/目录
由于最近要使用树莓派进行一些代码练习,但是好多东西都在windows里或虚拟机上,就想将文件传输到树莓派上,但试了发现u盘不能简单传送,就在网络上找到了通过windows 的scp命令传送 前提是树莓派先开启ssh服务,且Window…...
Unity抖音云启动测试:如何用cmd命令行启动exe
相关资料:弹幕云启动(原“玩法云启动能力”)_直播小玩法_抖音开放平台 1,操作方法 在做云启动的时候,接完发现需要命令行模拟云环境测试启动,所以研究了下。 首先进入cmd命令,CD进入对应包的文件…...
ZU47DR 100G光纤 高性能板卡
简介 2347DR是一款最大可提供8路ADC接收和8路DAC发射通道的高性能板卡。板卡选用高性价比的Xilinx的Zynq UltraScale RFSoC系列中XCZU47DR-FFVE1156作为处理芯片(管脚可以兼容XCZU48DR-FFVE1156,主要差别在有无FEC(信道纠错编解码࿰…...
【算法】动态规划专题⑥ —— 完全背包问题 python
目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题,它与0-1背包问题相似,但有一个关键的区别:在完全背包问题中,每种物品都有无限的数量可用。…...
MySQL——表操作及查询
一.表操作 MySQL的操作中,一些专用的词无论是大写还是小写都是可以通过的。 1.插入数据 INSERT [INTO] table_name (列名称…)VALUES (列数据…), (列数据…); "[]"表示可有可无,插入时,如果不指定要插入的列,则表示默…...
SAP-ABAP:ROLLBACK WORK使用详解
在SAP ABAP 中,ROLLBACK WORK 语句用于回滚当前事务(LUW,Logical Unit of Work),撤销自上次提交或回滚以来的所有数据库更改。它通常与 COMMIT WORK 配合使用,确保数据一致性。 关键点: 回滚作…...
C#中深度解析BinaryFormatter序列化生成的二进制文件
C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…...
Git提交错误解决:missing Change-Id in message footer
问题现象: 提交的commit中没有插入change id导致push代码失败。 问题解决: 针对该错误,Git已经给出了解决方案: 1、to automatically insert a Change-Id, install the hook: gitdir$(git rev-parse --git-dir); scp -p -P 2…...
51单片机之引脚图(详解)
8051单片机引脚分类与功能笔记 1. 电源引脚 VCC(第40脚):接入5V电源,为单片机提供工作电压。GND(第20脚):接地端,确保电路的电位参考点。 2.时钟引脚 XTAL1(第19脚&a…...
jupyterLab插件开发
jupyter lab安装、配置: jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…...
配置#include “nlohmann/json.hpp“,用于处理json文件
#include “nlohmann/json.hpp” // 需要安装 nlohmann/json.hpp 头文件 using json = nlohmann::json; 下载链接:https://github.com/nlohmann/json/tree/develop 1.下载并解压:首先,需要从nlohmann/json的GitHub仓库下载源代码,并解压得到的文件。 地址: nlohmann/json…...
MATLAB | 基于Theil-Sen斜率和Mann-Kendall检验的栅格数据趋势分析
最近看到一些博主分享关于 SenMK 检验的代码,对于新手来说可能有点复杂。我们编写了一段 MATLAB 代码,能够一次性解决这些问题,简化操作流程。我们还准备了几个关于趋势检验的空间分布图,供大家参考。 一、Sens Slope和Mann-Kenda…...
python连点器
要实现一个用于抖音点赞的鼠标连点工具,可以通过编程或现有软件实现。以下是两种常见方法(但请注意:频繁自动化操作可能违反平台规则,需谨慎使用): 方法 1:使用现成工具(如 AutoClic…...
C#程式状态机及其Godot实践
前言 今天是周日,马上就要迎来新的一周了,前几周都没干什么事,为了减缓偷懒症状,立个Flag从今往后每周至少更新两次文章。内容虽然无法保证优质,但重在坚持,全当写周记了。希望不要三分钟热度吧。 今天记录…...
Windows 系统下使用 Ollama 离线部署 DeepSeek - R1 模型指南
引言 随着人工智能技术的飞速发展,各类大语言模型层出不穷。DeepSeek - R1 凭借其出色的语言理解和生成能力,受到了广泛关注。而 Ollama 作为一款便捷的模型管理和部署工具,能够帮助我们轻松地在本地环境中部署和使用模型。本文将详细介绍如…...
Docker、Ollama、Dify 及 DeepSeek 安装配置与搭建企业级本地私有化知识库实践
在现代企业中,管理和快速访问知识库是提升工作效率、促进创新的关键。为了满足这些需求,企业越来越倾向于构建本地私有化的知识库系统,这样可以更好地保护企业数据的安全性和隐私性。本文将介绍如何利用 **Docker**、**Ollama**、**Dify** 和…...
【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)
常见的神经网络优化算法 1. 引言 在深度学习中,优化算法(Optimizers)用于更新神经网络的权重,以最小化损失函数(Loss Function)。一个高效的优化算法可以加速训练过程,并提高模型的性能和稳定…...
react-native fetch在具有http远程服务器后端的Android设备上抛出“Network request failed“错误
问题描述: 在具有http远程服务器后端的Android设备上,使用react-native fetch时抛出"Network request failed"错误。 回答: "Network request failed"错误通常表示在进行网络请求时出现了问题。可能的原因包括网络连接…...
【JVM详解四】执行引擎
一、概述 Java程序运行时,JVM会加载.class字节码文件,但是字节码并不能直接运行在操作系统之上,而JVM中的执行引擎就是负责将字节码转化为对应平台的机器码让CPU运行的组件。 执行引擎是JVM核心的组成部分之一。可以把JVM架构分成三部分&am…...
route 与 router 之间的差别
简述: router:主要用于处理一些动作, route:主要获得或处理一些数据,比如地址、参数等 例: videoInfo1.vue: <template><div class"video-info"><h3>二级组件…...
[vue3] Ref Reactive
【b站-【前端面试】Vue3 ref 与 reactive 区别】 Ref:Ref用于创建一个响应式的基本数据类型,比如数字、字符串等。它将普通的数据变成响应式数据,可以监听数据的变化。使用Ref时,我们可以通过.value来访问和修改数据的值。 Reac…...
SamWaf开源轻量级的网站应用防火墙(安装包),私有化部署,加密本地存储的数据,易于启动,并支持 Linux 和 Windows 64 位和 Arm64
一、SamWaf轻量级开源防火墙介绍 (文末提供下载) SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙,完全私有化部署,数据加密且仅保存本地,一键启动,支持Linux,Wi…...
极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant
作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&a…...
22.2、Apache安全分析与增强
目录 Apache Web安全分析与增强 - Apache Web概述Apache Web安全分析与增强 - Apache Web安全威胁Apache Web安全机制Apache Web安全增强 Apache Web安全分析与增强 - Apache Web概述 阿帕奇是一个用于搭建WEB服务器的应用程序,它是开源的,它的配置文件…...
理邦仪器嵌入式(C/C++开发)开发面试题及参考答案
C++ 虚函数的概念和作用 C++ 中的虚函数是一种非常重要的机制,它在实现多态性方面起着关键作用。 概念上来说,虚函数是在基类中使用关键字 virtual 声明的成员函数。当基类的指针或引用指向派生类的对象时,通过这个基类的指针或引用调用虚函数,实际执行的是派生类中重写的该…...
windows + visual studio 2019 使用cmake 编译构建静、动态库并调用详解
环境 windows visual studio 2019 visual studio 2019创建cmake工程 1. 静态库.lib 1.1 静态库编译生成 以下是我创建的cmake工程文件结构,只关注高亮文件夹部分 libout 存放编译生成的.lib文件libsrc 存放编译用的源代码和头文件CMakeLists.txt 此次编译CMak…...
Chrome 浏览器 支持多账号登录和管理的浏览器容器解决方案
根据搜索结果,目前没有直接提到名为“chrometable”的浏览器容器或插件。不过,从功能描述来看,您可能需要的是一个能够支持多账号登录和管理的浏览器容器解决方案。以下是一些可能的实现方式: 1. 使用 Docker 容器化部署 Chrome …...
GrassWebProxy
GrassWebProxy第一版: using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json;…...
DeepSeek API 调用 - Spring Boot 实现
DeepSeek API 调用 - Spring Boot 实现 1. 项目依赖 在 pom.xml 中添加以下依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></depe…...
