以下面的图片为例题,仅给出源代码,不谈算法思想。
#include
#include
#include
#define MAX_VERTEX_NUM 20+3 //最大顶点数量
//#define true 1
//#define false 0
using namespace std;
typedef char VERTEX_TYPE; //顶点的类型
typedef struc...
分类:
其他好文 时间:
2014-10-05 12:07:48
阅读次数:
215
理论:深度优先搜索(Depth_Fisrst Search)遍历类似于树的先根遍历,是树的先根遍历的推广:广度优先搜索(Breadth_First Search) 遍历类似于树的按层次遍历的过程:java实现Vertex.javapackage 图;public class Vertex{ S...
分类:
其他好文 时间:
2014-10-04 21:27:27
阅读次数:
432
一,什么是最小生成树
1,什么是生成树
如果连通图G的一个子图是一棵包含G所有顶点的树,则该子图成为G的生成树。
生成树是含有该连通图全部顶点的一个极小连通子图,它并不是唯一的,从不同的顶点出发可以得到不同的子树。含有N个顶点的连通图的生成树有N-1条边。
2,如何求一个连通图
的生成树
要求一个连通图的生成树只需要从一个顶点出发,做一次深度优先或...
分类:
其他好文 时间:
2014-10-04 20:58:47
阅读次数:
155
一,深度优先搜索
基本思想:
以图中某个顶点Vi为出发点,首先访问出发点Vi,然后任选一个Vi的未访问过的临界点Vj,以Vj为新的出发点继续进行深度优先搜索,依此类推,直至图中所有顶点都被访问过。
深度优先搜索可以看成一个递归过程。
具体过程:
首先选定结点v0为出发点,访问V0,然后从V0的邻接点V1,V3,V5,任选一个访问,此处我们访问V1...
分类:
其他好文 时间:
2014-10-04 19:29:07
阅读次数:
192
DFS实现步骤如下:
①访问顶点V,并标记V已经访问
②查找V的第一个邻接顶点w
③若W存在,则继续执行,否则算法结束
④若W未被访问,则使用DFS递归访问w
⑤查找V的下一个邻接节点,并记为W,转到步骤③
对上图进行DFS,则访问顺序为
A B D C E
使用伪代码如下:
Vector G[maxn]
int vis[maxn]
void dfs(int u)...
分类:
其他好文 时间:
2014-10-03 11:05:14
阅读次数:
194
图的连通性问题包括:1、强连通分量。2、最小点基和最小权点基。3、双连通。4、全局最小割。5、2-SAT一、强连通分量强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具。有三种算法:1、Kosaraju算法。对原图和反图分别进行一次深度优先搜索。2、Tarjan算法。用了时间戳。3、Garb...
分类:
其他好文 时间:
2014-09-30 03:11:22
阅读次数:
250
深度优先搜索(DFS, Depth-First Search)是搜索的手段之一。它从某个状态开始,不断地转移状态直到无法转移,然后退到前一步的状态,如此不断重复,直至找到最终的解。部分和问题给定整数a1、a2、……、an,判断是否可以从中选出若干个数,使它们的和恰好为k。限制条件1 ≤ n ≤ 20...
分类:
其他好文 时间:
2014-09-27 00:38:38
阅读次数:
245
说说:题目的意思本质上就是给你N条无向边,若存在欧拉回路,则将其生成。无向图的欧拉回路的判断非常容易,只要判断是否每个节点都是偶数度即可。但是,对欧拉回路的生成,也就是Fleury算法,貌似有点问题。我自己在这个地方也纠结了好久。下面就来讲讲Fleury算法。
开始我觉得,就是个非常简单的深度优先搜索的问题,直接从任意一个节点,然后不断DFS即可。所以就有了如下的代码:
for...
分类:
其他好文 时间:
2014-09-24 22:22:28
阅读次数:
302
定义结点struct MGraph{ int vexs[MAXVEX]; //顶点数 int arc[MAXVEX][MAXVEX]; //邻接矩阵 int numVertex, numEdges; //定点数 边数};深度优先遍历图示 参考代码bool visi...
分类:
其他好文 时间:
2014-09-23 11:56:54
阅读次数:
293
原题地址:https://oj.leetcode.com/problems/n-queens/题意:经典的N皇后问题。解题思路:这类型问题统称为递归回溯问题,也可以叫做对决策树的深度优先搜索(dfs)。N皇后问题有个技巧的关键在于棋盘的表示方法,这里使用一个数组就可以表达了。比如board=[1, ...
分类:
编程语言 时间:
2014-09-21 13:02:00
阅读次数:
208