摘要: 使用贪心策略,伪代码如下mst1 GENERIC-MST(G,w)2 A=空集3 while(A不形成生成树)4 找到一条安全边5 将此边添加到A中去6 return A在Kruskal算法中,集合A是一个森林,加入集合A中的安全边总是图中连接两个不同连通分支的最小权边。在Prim算法中,集合A仅形成单棵树,添加入集合A的安全边总是连接树与一个不在树中得顶点的最小权边。info 1 typedef struct Edge 2 { 3 int adj_vertex; 4 int weigh... 阅读全文
posted @ 2012-02-21 21:21 Cavia 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 思路:a、对图进行深度优先搜索b、求图的转置c、按照a中求得的finish time从大到小排列,按此顺序对转置图进行深度优先搜索d、得到的深度优先森林即为图的强连通分支 阅读全文
posted @ 2012-02-21 20:53 Cavia 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 两种思路一a、找到图中入度为零的顶点,并输出b、删除该顶点,并修改其他顶点的入度c、如果还有入度为零的顶点,则转a,否则输出二a、进行深度优先搜索b、按finish time反序排列,即为拓扑序列solution1 1 int Is_ZeroDegree(int* a,int n) 2 { 3 for(int i=0;i<n;++i) 4 if(a[i]==0) 5 return i; 6 return n; 7 } 8 9 void Topo_Sort1(const Graph* g)10 {11 int indegree[5... 阅读全文
posted @ 2012-02-21 15:39 Cavia 阅读(202) 评论(0) 推荐(0) 编辑
摘要: dfs nonrecursion 1 int _visited[50]; 2 void DFS_Norecursion(const Graph* g) 3 { 4 for(int i=0;i<g->v;++i) 5 { 6 _visited[i]=0; 7 p_dfs[i]=0; 8 } 9 int pp=0;10 for(int i=0;i<g->v;++i)11 {12 int m=i;13 while(!s.empty() || _visited[m]==0)14 ... 阅读全文
posted @ 2012-02-21 10:14 Cavia 阅读(222) 评论(0) 推荐(0) 编辑