45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:经典图算法的方法分析

经典图算法的方法分析

2016-08-31 13:33:58 来源:www.45fan.com 【

经典图算法的方法分析

本标程介绍了一些经典的图论算法,C++描述。

经典图算法的方法分析 #include < cstring >
经典图算法的方法分析 // 常量定义:
经典图算法的方法分析 const int maxV = 100 ;
经典图算法的方法分析
const double Inf = 1e100;
经典图算法的方法分析
// constintInf=2000000000;
经典图算法的方法分析
// Graph类定义:
经典图算法的方法分析 template < class T >
经典图算法的方法分析 经典图算法的方法分析 struct GraphMatrix {
经典图算法的方法分析
int v; // 顶点数
经典图算法的方法分析 int e; // 边数
经典图算法的方法分析 Ta[maxV][maxV]; // 邻接矩阵
经典图算法的方法分析 经典图算法的方法分析 void init() {
经典图算法的方法分析memset(a,
0 , sizeof (a));
经典图算法的方法分析}

经典图算法的方法分析 经典图算法的方法分析 void clear() {
经典图算法的方法分析
int i,j;
经典图算法的方法分析经典图算法的方法分析
for (i = 0 ;i < v; ++ i) {
经典图算法的方法分析
for (j = 0 ;j < v; ++ j)
经典图算法的方法分析a[i][j]
= Inf;
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析}
;
经典图算法的方法分析
经典图算法的方法分析#include
< list >
经典图算法的方法分析 using std::list;
经典图算法的方法分析template
< class T >
经典图算法的方法分析 经典图算法的方法分析 struct GraphList {
经典图算法的方法分析
int v;
经典图算法的方法分析
int e;
经典图算法的方法分析list
< T > a[maxV]; // 邻接表
经典图算法的方法分析 经典图算法的方法分析 void clear() { // clear()应在更改v之前进行
经典图算法的方法分析 int i;
经典图算法的方法分析
for (i = 0 ;i < v;i ++ )
经典图算法的方法分析a[i].clear();
经典图算法的方法分析}

经典图算法的方法分析 经典图算法的方法分析 ~ GraphList() {
经典图算法的方法分析v
= maxV;
经典图算法的方法分析clear();
经典图算法的方法分析}

经典图算法的方法分析}
;
经典图算法的方法分析
经典图算法的方法分析经典图算法的方法分析
namespace bridgeNS {
经典图算法的方法分析经典图算法的方法分析
/* 解决:查找、打印桥
经典图算法的方法分析*算法:DFS——O(E)
经典图算法的方法分析*输入:连通图(表):g
经典图算法的方法分析*输出:屏幕
经典图算法的方法分析
*/

经典图算法的方法分析GraphList < int > g;
经典图算法的方法分析
int cnt;
经典图算法的方法分析
int pre[maxV]; // DFS顺序
经典图算法的方法分析 int low[maxV]; // 最低前序编号:儿子low值的最小值
经典图算法的方法分析 经典图算法的方法分析 void _bridge( int prnt, int w) {
经典图算法的方法分析
int v; // son
经典图算法的方法分析 low[w] = pre[w] = cnt ++ ;
经典图算法的方法分析std::list
< int > ::iteratorli;
经典图算法的方法分析经典图算法的方法分析
for (li = g.a[w].begin();li != g.a[w].end(); ++ li) {
经典图算法的方法分析v
=* li;
经典图算法的方法分析经典图算法的方法分析
if (pre[v] ==- 1 ) {
经典图算法的方法分析_bridge(w,v);
经典图算法的方法分析
if (low[w] > low[v])low[w] = low[v];
经典图算法的方法分析
if (low[v] == pre[v])
经典图算法的方法分析printf(
" %d-%d/n " ,w,v); // 找到桥
经典图算法的方法分析 }
else if (v != prnt && low[w] > pre[v])low[w] = pre[v];
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析 经典图算法的方法分析 void bridge() {
经典图算法的方法分析cnt
= 0 ;
经典图算法的方法分析memset(pre,
- 1 , sizeof (pre));
经典图算法的方法分析_bridge(
- 1 , 0 );
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析
经典图算法的方法分析经典图算法的方法分析
namespace GabowNS {
经典图算法的方法分析经典图算法的方法分析
/* 解决:强分量
经典图算法的方法分析*算法:Gabow——O(E)
经典图算法的方法分析*输入:图(表):g
经典图算法的方法分析*输出:分量编号sc[]
经典图算法的方法分析
*/

经典图算法的方法分析GraphList < int > g;
经典图算法的方法分析
int cnt0,cnt1;
经典图算法的方法分析
int sc[maxV]; // 分量编号
经典图算法的方法分析 int pre[maxV]; // DFS顺序
经典图算法的方法分析 int path[maxV],pp; // path栈
经典图算法的方法分析 int stack[maxV],sp; //
经典图算法的方法分析
经典图算法的方法分析 经典图算法的方法分析 void _SCdfsR( int w) {
经典图算法的方法分析pre[w]
= cnt0 ++ ;
经典图算法的方法分析stack[sp
++ ] = w;
经典图算法的方法分析path[pp
++ ] = w;
经典图算法的方法分析
int v;std::list < int > ::iteratorli;
经典图算法的方法分析经典图算法的方法分析
for (li = g.a[w].begin();li != g.a[w].end(); ++ li) {
经典图算法的方法分析v
=* li;
经典图算法的方法分析
if (pre[v] ==- 1 )_SCdfsR(v);
经典图算法的方法分析经典图算法的方法分析
else if (sc[v] ==- 1 ) {
经典图算法的方法分析
while (pre[path[pp - 1 ]] > pre[v]) -- pp;
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析 if (path[pp - 1 ] != w) return ;
经典图算法的方法分析
-- pp;
经典图算法的方法分析经典图算法的方法分析
do {
经典图算法的方法分析sc[stack[
-- sp]] = cnt1;
经典图算法的方法分析}
while (stack[sp] != w);
经典图算法的方法分析
++ cnt1;
经典图算法的方法分析}

经典图算法的方法分析 经典图算法的方法分析 void init() {
经典图算法的方法分析memset(pre,
- 1 , sizeof (pre));
经典图算法的方法分析memset(sc,
- 1 , sizeof (sc));
经典图算法的方法分析cnt0
= cnt1 = 0 ;
经典图算法的方法分析sp
= pp = 0 ;
经典图算法的方法分析
int i;
经典图算法的方法分析经典图算法的方法分析
for (i = 0 ;i < g.v; ++ i) {
经典图算法的方法分析
if (sc[i] ==- 1 )
经典图算法的方法分析_SCdfsR(i);
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析
经典图算法的方法分析 经典图算法的方法分析
bool isStrongReach( int s, int t) {
经典图算法的方法分析
return sc[s] == sc[t];
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析
经典图算法的方法分析 经典图算法的方法分析
namespace PrimNS {
经典图算法的方法分析经典图算法的方法分析
/* 解决:最小生成树MST
经典图算法的方法分析*算法:Prim——O(V^2)
经典图算法的方法分析*输入:加权连通图(矩阵):g
经典图算法的方法分析*输出:父节点st[],与其父之边的权重wt[]
经典图算法的方法分析
*/

经典图算法的方法分析GraphMatrix < double > g;
经典图算法的方法分析
int st[maxV]; // MST节点之父——用以保存MST
经典图算法的方法分析 double wt[maxV + 1 ]; // 与其父的边的权重
经典图算法的方法分析 int fr[maxV]; // 非树顶点的最近树顶点
经典图算法的方法分析 经典图算法的方法分析 void mst() {
经典图算法的方法分析
int v,w,min;
经典图算法的方法分析经典图算法的方法分析
for (v = 0 ;v < g.v; ++ v) {
经典图算法的方法分析st[v]
=- 1 ;fr[v] = v;wt[v] = Inf;
经典图算法的方法分析}

经典图算法的方法分析st[ 0 ] = 0 ;wt[g.v] = Inf;
经典图算法的方法分析经典图算法的方法分析
for (min = 0 ;min != g.v;) {
经典图算法的方法分析v
= min;st[v] = fr[v];
经典图算法的方法分析经典图算法的方法分析
for (w = 0 ,min = g.v;w < g.v; ++ w) {
经典图算法的方法分析经典图算法的方法分析
if (st[w] ==- 1 ) {
经典图算法的方法分析
if (g.a[v][w] < wt[w])
经典图算法的方法分析wt[w]
= g.a[v][w],fr[w] = v;
经典图算法的方法分析
if (wt[w] < wt[min])
经典图算法的方法分析min
= w;
经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析}

经典图算法的方法分析
经典图算法的方法分析经典图算法的方法分析
namespace DijkstraNS {
经典图算法的方法分析经典图算法的方法分析
/* 解决:非负权图单源最短路径树SPT
经典图算法的方法分析*算法:Dijkstra——O(V^2)
经典图算法的方法分析*输入:加权连通图(矩阵):g
经典图算法的方法分析*输

本文地址:http://www.45fan.com/a/question/70260.html
Tags: 算法 经典 标程
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部