一些经典图论算法(C++描述).doc

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一些经典图论算法(C描述)

一些经典的图论算法,C++描述。 #include cstring // 常量定义: const int maxV = 100 ; const double Inf = 1e100; // const int Inf=2000000000; // Graph类定义: template class T struct GraphMatrix { int v; // 顶点数 int e; // 边数 T a[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 ::iterator li; 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],

文档评论(0)

sy78219 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档