青少年编程知识记录 codecoming

【图论】迪杰斯特拉算法

迪杰斯特拉算法是由荷兰计算机科学家艾兹赫尔・迪杰斯特拉于 1956 年提出的单源最短路径算法,用于求解带权有向、 无向图中,从一个源节点到其余所有节点的最短路径问题(要求图中所有边的权值非负)。

一、核心思想

  1. 贪心策略:每次从未确定最短路径的节点中,选择距离源节点最近的节点,将其标记为 “已确定”;

  2. 松弛操作:以该节点为中介,更新其邻接节点到源节点的距离;

  3. 重复上述步骤,直到所有节点都被标记为 “已确定”。

二、算法步骤(以无向带权图为例)

假设图有 n 个节点,源节点为 s
  1. 初始化

    • 距离数组 dist[]dist[s] = 0(源节点到自身距离为 0),其余节点 dist[i] = ∞(无穷大);

    • 标记数组 visited[]:所有节点初始为 false(未确定最短路径);

    • 优先队列(小顶堆):存储 (当前距离, 节点),初始入队 (0, s)。(朴素解法不使用优先队列)

  2. 迭代求解

    • 取出优先队列中距离最小的节点 u,若 u 已访问则跳过;

    • 标记 u 为已访问(visited[u] = true);

    • 遍历 u 的所有邻接节点 v,若 dist[v] > dist[u] + 权值(u,v),则更新 dist[v] = dist[u] + 权值(u,v),并将 (dist[v], v) 入队;

  3. 终止条件优先队列为空,此时 dist[] 数组存储源节点到所有节点的最短路径。(朴素解法不使用优先队列)



作者:亿万年的星光 分类:算法 浏览:

如何使用code::blocks编写C++代码

在前面的文章中,已经简单介绍了如何下载code::blocks了,这篇文章介绍一下如何使用code::blocks编写一个C++代码我们打开code::blocks软件,点击”New File“然后点击”Empty file“然后输入下面的代码#include<iostream> using namespace std; int main(){     cout<<"hello 
作者:亿万年的星光 分类:C++目录 浏览:

一笔画问题



【题目描述】

如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。

根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。

【输入】

第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。

【输出】

欧拉路或欧拉回路,输出一条路径即可。

【输入样例】

5 5  1 2  2 3  3 4  4 5  5 1

【输出样例】

1 5 4 3 2 1

【提示】

【数据范围】

对于100%的数据:1 < n < 100,1 < m < 2000。



作者:亿万年的星光 分类:C++目录 浏览:

图的遍历



【题目描述】

给出  个点, 条边的有向图,对于每个点 ,求  表示从点  出发,能到达的编号最大的点。

【输入】

第  行  个整数 ,表示点数和边数。

接下来  行,每行  个整数 ,表示边 。点用  编号。

【输出】

一行  个整数 

【输入样例】

4 3  1 2  2 4  4 3

【输出样例】

4 4 3 4

【提示】

对于  的数据,

对于  的数据,



作者:亿万年的星光 分类:C++目录 浏览:

图的访问与遍历-广度优先搜索

对于无向图的广度优先搜索#include <iostream> #include <vector> #include <queue> using namespace std; // 广度优先遍历核心函数 void BFS(int start, const vector<vector<int>>& adjList
作者:亿万年的星光 分类:C++目录 浏览:

Code::Blocks下载安装教程



Code::Blocks 是一款免费、开源且跨平台的 C/C++ 集成开发环境。它支持 Windows、Linux 和 macOS 等多种操作系统,核心特点是轻量快速、纯专注于 C/C++ 开发,并内置了对多种编译器(如 GCC、MinGW、Clang)的支持,是初学者和学习 C/C++ 编程的常用工具之一。

官网地址:https://www.codeblocks.org/









一、下载

点击左侧的”Downloads“或者点击下载地址:  https://www.codeblocks.org/downloads/

如果上面的打不开,可以使用网盘下载:

codeblocks-25.03mingw-setup.exe: https://url47.ctfile.com/f/64055047-8513804238-913cef?p=7381 (访问密码: 7381)



点击”Download the binary release“

这里选择的版本是codebloscks-25.03mingw-setup.exe,然后点击Sourceforge.net进行下载



然后就会跳转到  https://sourceforge.net/projects/codeblocks/

就开始下载了,如果没有下载,可以点击左侧的”Download“

二、安装



下载后可以看到安装程序,双击运行。

双击后,点击”Next“按钮



这里点击”I Agree“

下一步点击”Next“

这里可以选择其他盘符,然后点击‘Install”

安装过程:

这里点击“Yes”



然后点击“Next”



这一步点击“Finish”

等待一段时间后就可以看到Code::Blocks运行了















作者:亿万年的星光 分类:C++目录 浏览:

DEVC++如何支持C++11

DEVC++默认开启C++11,需要手动添加C++11支持。DEVC++需要使用高一点的版本,DEVC++5.11下载地址:(1)  官方下载地址: Dev-C++ download | SourceForge.net(2)  网盘下载地址:(访问密码: 7381)https://url47.ctfile.com/f/64055047-8504055040-c524b3?p=7381 我们打开DevC++,新建一个C++代码,#include &
作者:亿万年的星光 分类:C++目录 浏览:

图的访问与存储—临接表

        在图论中,邻接表(Adjacency List) 是表示图(包括无向图、有向图、带权图)的一种高效数据结构,核心思想是为图中的每个顶点维护一个 “邻居列表”,记录该顶点直接相连的所有顶点(及边的权重,若为带权图)。相比于邻接矩阵(用二维数组存储顶点间的连接关系),邻接表在稀疏图(边数远少于顶点数的平方) 中更节省空间,也是工程中最常用的图存储方式之一。一、基本结构邻接表的核心是 “数组 + 链表 / 动态数组” 的组合:
作者:亿万年的星光 分类:C++目录 浏览:

图的访问与遍历-深度优先搜索

一、图的遍历图的遍历是指从图中的某个顶点出发,按照一定规则访问图中所有顶点且每个顶点仅访问一次的过程,核心分为深度优先搜索(DFS) 和广度优先搜索(BFS) 两大类,适用于无向图、有向图等各类图结构,也是图论算法(如路径查找、连通性判断)的基础。关键点:连通图与非连通图:连通图(无向图):从任意顶点出发,DFS/BFS 可访问所有顶点;非连通图:需遍历所有顶点,对未访问的顶点再次调用 DFS/BFS(统计连通分量)。有向图的遍历:邻接表仅添加 “有向边”(初始化图时注释无向
作者:亿万年的星光 分类:C++目录 浏览:

混合背包

1.问题定义:混合背包问题是经典背包问题的一个变种,其中物品的类型不单一,而是混合了以下三种类型:01 背包物品:每种物品最多只能选一次。完全背包物品:每种物品可以选择无限次。多重背包物品:每种物品有指定的最大数量 s_i。目标是在背包容量为 V 的情况下,选择物品放入背包,使得总价值最大。2.问题形式化:假设有 N 种物品和一个容量为 V 的背包。第 i 件物品的体积是 v_i,价值是 w_i,数量是 s_i:如果 s_i = -1:表示这是 01 背包物品(只能选 0 或 1 次)如果 s_
作者:亿万年的星光 分类:C++目录 浏览: