![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Graph
GNIHTON
这个作者很懒,什么都没留下…
展开
-
Poj1502.MPI Maelstrom(Dijkstra&Bellman-Ford)
题目链接:http://poj.org/problem?id=1502。 思路:这道题本质是求单源最短路径。Dijkstra算法解决,利用dist数组保存每个顶点到源点的最短路径,利用visited数组标示该顶点是否被访问,每一次更新dist时顺便找出未被访问点到源点的最短路径。代码实现如下:#include #include #include using namespace st原创 2018-01-10 22:28:54 · 270 阅读 · 0 评论 -
Poj1979.Red and Black(DFS)
题目链接:http://poj.org/problem?id=1979。 思路:简单的搜索问题,利用DFS即可。代码实现如下:#include using namespace std;const int MAXN = 25;char graph[MAXN][MAXN];bool visit[MAXN][MAXN];int w, h, cnt = 0;struct To{原创 2018-01-12 15:05:59 · 123 阅读 · 0 评论 -
判断有向图是否有环
题目:给出一个有向图,判断图中是否有环。 思路:可以利用拓扑排序来进行判断,有两种,一种是基于Kahn’s algorithm,另一种是基于DFS。具体可以参看:https://en.wikipedia.org/wiki/Topological_sorting。Kahn’s algorithm的大致流程是先将有向图中入度为0的顶点放入队列中,然后开始循环直到队列为空,在循环中,取出队首元素记为i...原创 2018-01-12 16:26:29 · 2083 阅读 · 0 评论 -
Strongly connected component
思路:这道题目是让我们求出在经过旷日持久的互殴后至少能够留下多少只怪兽。本质是要我们根据怪兽间关系,构造有向图寻找强连通分量。如果有两个强连通分量那么每个强连通分量中至少会有一只怪兽留下,假设一个有向图中强连通分量个数为n,如果强连通分量间互不连通,那么至少能够留下n只怪兽;若两个强连通分量之间存在一条边相连,那个怪兽的数量为n-1。这道题使用Tarjan来寻找强连通分量,代码实现如下:cla原创 2018-01-15 11:58:50 · 477 阅读 · 0 评论 -
Poj2186.Popular Cows(SCC)
题目链接:http://poj.org/problem?id=2186。 思路:利用tarjan构造强连通分量,并统计各强连通分量内节点数目, 然后将各强连通分量当成一个节点对待,构成一个新的图,统计出各节点的出度数,要存在受其他牛欢迎的牛,那么强连通分量构成的图必定是一个连通的DAG,而且该DAG出度为0的节点数有且只有1个,否则是不存在满足题意的牛。代码实现如下:#include原创 2018-01-16 09:14:21 · 177 阅读 · 0 评论 -
Poj1077.Eight(BFS+Canton)
题目链接:http://poj.org/problem?id=1077。 思路:经典的八数码问题。棋盘的每个状态对应一个结点,如果状态A可以通过移动一步得到状态B,则从A到B有一条边。将初始状态放入队列中,开始BFS,一旦生成目标状态,BFS便可停止。对于搜索过程中的去重,可以将全排列中的一个状态经过康托展开转换为一个唯一的数来压缩存储空间,利用一个visit数组来判断遍历到的状态是否已生成。代原创 2018-01-16 17:01:47 · 253 阅读 · 0 评论 -
POJ3177.Redundant Paths
题目链接:http://poj.org/problem?id=3177。 思路:这道题目给出一个无向连通图,要求至少添加多少条边才能够使得任意一对顶点间至少有两条不同的路径(没有相同的边,但可以有共同的中间顶点),利用tarjan求出该连通图的边双连通分量,压缩成一个点,最后能构成一棵树,那么添加的边数=(树中度为1的节点数+1)/2,代码如下:#include <iostream...原创 2018-03-16 09:19:32 · 125 阅读 · 0 评论 -
POJ3259.Wormholes
题目链接:http://poj.org/problem?id=3259。 思路:判断Farmer John能否通过虫洞穿越过去见到自己,问题可以转化为判断给定有权图是否存在负权圈,使用Bellman-Ford算法可以判断,代码实现如下:#include <iostream>#include <cstring>#include <vector>us...原创 2018-03-18 10:39:07 · 127 阅读 · 0 评论