图论
文章平均质量分 53
sunday_soft
毕业于东北大学,做教师和软件开发工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
理想路径(UVA1599 图的双向广度优先搜索)
题目:给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示)。求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小。一对结点间可能有多条边,一条边可能连接两个相同结点。输入保证至少存在一条节点1到n的路径。输入:输入共m+1行。第一行包含两个整数n和m。之后的m行,每行都含三个整数ai、bi、ci,表示ai、bi之间有一条颜色为ci的路径。输出:输出共两行,第一行包含正整数k,表示节点原创 2021-08-18 13:48:29 · 505 阅读 · 0 评论 -
油田(UVA572图的搜索)
题目:某石油公司勘探地下油田资源,在一长方形区域中工作。他们的勘探方案是,首先将油田划分成许多小正方形区域,然后分别探测每一块小正方形区域是否有油。含有油就为油田。如果相邻两个(水平、垂直或对角线相邻)油田,就位相同油藏的一部分。油藏尽可能多的包含油田(油田的个数不超过100)。你的工作是确定这个长方形地域中包含多少个不同的油藏。输入:输入文件中包含一个或多个长方形地域。每个地域的第一行都有两个正整数m和n(1<=m,n<=100),表示地域的行数和列数。如果m=0,则表示输入结束;否则此原创 2021-08-15 10:47:01 · 255 阅读 · 0 评论 -
图的深度优先遍历
深度优先搜素(Depth First Search ,DFS)是最常见的图的搜索之一,深度优先搜索沿着一条路径一直搜索下去,在无法搜索时,返回到刚刚访问的节点。深度优先的特征是:后被访问的节点,其领接点先被访问。根据深度优先遍历的特征:后来者先服务,和数据结构栈的特征一样。所以可以借助栈来实现。使用递归也可以实现深度优先搜素,但递归本身也是使用栈实现的。1、算法步骤(1)初始化图中所有节点均未访问。(2)从图中某个节点v出发,访问v并标记为已访问。(3)依次检查v的所有邻接点w,如果w未被访问,原创 2021-08-15 09:42:55 · 5733 阅读 · 0 评论 -
图的广度优先遍历
广度优先遍历(Breadth First Search BFS)又被称为宽度优先搜素。如下图假设源点为1,从1出发访问1的邻接点2、3,从2出发访问4,从3出发访问5,从4出发访问6,访问完毕。基于邻接矩阵的广度优先代码:#include<iostream>#include<queue>//引入队列头文件using namespace std;const int MaxVnum=100;//顶点数最大值bool visited[MaxVnum]; //访问标志数组原创 2021-08-13 13:30:01 · 231 阅读 · 0 评论 -
奶牛排序(POJ3275)
题目描述:小D想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。小D通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在小D想要知道,他至少还要调查多少对关系才能完成整个排序。输入:第1行包含两个整数N和M。第2 … M+1行,每行都包含两个整数X和Y。X和Y都在1~N范围内,表示奶牛X的排名高于奶牛Y。输出:单行输出至少还要调查多少种关系才能完成整个排序。输入样例:5 52 11 52 3原创 2021-08-11 20:22:48 · 580 阅读 · 0 评论 -
有向图D和E
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-08-10 13:55:24 · 651 阅读 · 0 评论 -
最大的节点(p3916 图的遍历)
算法思路:存储图的反向图,在反向图上进行倒序深度遍历#include<bits/stdc++.h>using namespace std;const int maxn=100000+5;int maxx[maxn],head[maxn];int n,m,x,y,cnt;struct Edge{ int to,next;}e[maxn];void add(int u,int v){//添加一条边u--v e[cnt].to=v; e[cnt].next=head[.原创 2021-08-08 09:01:25 · 325 阅读 · 0 评论 -
图的存储详解
一、邻接矩阵#include<iostream>//创建无向图的邻接矩阵using namespace std;#define MaxVnum 100 //顶点数最大值typedef char VexType; //顶点的数据类型,根据需要定义typedef int EdgeType; //边上权值的数据类型,若不带权值的图,则为0或1typedef struct{ VexType Vex[MaxVnum]; EdgeType Edge[MaxVnum][MaxVnum原创 2021-08-06 19:53:53 · 206 阅读 · 0 评论
分享