【c++/euler】套圈法解有向图的欧拉回路
来源:互联网 发布:淘宝财富值怎么刷的 编辑:程序博客网 时间:2024/06/15 12:46
【参考】Matching_Euler_Tours_and_the_Chinese_Postman
[REPRESENTATION]The edge-pairingrepresentation【表示方法】边对表示法
【核心方法】
void Model::findEuler(int index, Node * node, Edge * edge){Node* node_a = node;Edge* edge_a = edge;while (true){Node* node_b = edge_a->getInNode();Edge* edge_b = NULL;for (auto &tmp_e : node_b->getOutEdges()){if (!tmp_e->getMark()){edge_b = tmp_e;break;}}if (edge_b != NULL){pair<Edge*, Edge*> tmp_pair;tmp_pair.first = edge_a;tmp_pair.second = edge_b;edge_a->setMark(true);edge_b->setMark(true);_edgePairs.push_back(tmp_pair);}else//if(edge_b==NULL){break;}node_a = node_b;edge_a = edge_b;}if (index != -1){pair<Edge*, Edge*> tmp_pair;tmp_pair.first = edge_a;tmp_pair.second = _edgePairs[index].second;_edgePairs.push_back(tmp_pair);_edgePairs[index].second = edge;}return;}
【外层方法】
if (nodes.size() > 0){Node* node_0 = nodes.front();Edge* edge_0 = node_0->getOutEdges().front();findEuler(-1, node_0, edge_0);for (auto &tmp_n : nodes){for (auto &tmp_e : tmp_n->getOutEdges()){if (!tmp_e->getMark()){findEuler(getOneEdgePairIndex(tmp_n), tmp_n, tmp_e);//第一个参数为相交在tmp_n的一对边}}}}cout << "# Edge pairs:" << _edgePairs.size() << endl;cout << "# Finish find the euler route" << endl;/*output the route*/int pair_size = _edgePairs.size();bool * print_mark = new bool[pair_size];for (int i = 0; i < pair_size; ++i){print_mark[i] = false;}Edge* cur_edge = _edgePairs[0].first;Edge* next_edge = _edgePairs[0].second;print_mark[0] = true;/*print*/cur_edge->print();while (next_edge != NULL){/*print*/next_edge->print();cur_edge = next_edge;next_edge = NULL;/*find next edge*/for (int i = 1; i < pair_size; ++i){if (!print_mark[i]){if (_edgePairs[i].first == cur_edge){next_edge = _edgePairs[i].second;print_mark[i] = true;break;}}}}
0 0
- 【c++/euler】套圈法解有向图的欧拉回路
- 数据结构实验之图论八:欧拉回路 无向图的欧拉回路判断
- 无向图的欧拉回路线性时间算法
- POJ 1041 无向图的欧拉回路
- hdu 1878 无向图的欧拉回路
- 单词拼接(有向图的欧拉回路)
- 有向图,无向图的欧拉回路和欧拉通路poj 2337
- 【UVa】 10735 Euler Circuit 混合图的欧拉回路 最大流
- 欧拉回路(Euler Circuits)
- 欧拉回路(Euler Circuit)
- 无向图的欧拉回路和欧拉通路
- 有向图的欧拉回路及欧拉道路
- 图的欧拉回路
- 欧拉回路(混合图的欧拉回路)
- 【欧拉回路(无向图判定)】hdu 1878 欧拉回路
- 无向图中欧拉回路的求法 poj1041
- 有向图中欧拉回路的求法
- 杭电hdu 1878 欧拉回路 无向图
- 蓝桥带分数(全排列)
- Html5 Websocket while死循环的问题
- 作为程序员,也许其他的也许可以不看,但是这些你值得一看(细节决定成败)
- spring bean 的理解
- 我的实习之路2
- 【c++/euler】套圈法解有向图的欧拉回路
- vue.js在windows本地下搭建环境和创建项目。
- Android NDK 编译时出现make (e=2): 系统找不到指定的文
- Eclipse导入web项目,ServletActionContext.*() 出错的解決方法
- jsp注册页面实现密码是否一致的检测
- UE复制内容,粘贴到source insight的时候不会自动换行,而是显示为很长一行
- HDFS原理扫盲
- java 泛型 应用 type
- C#.net picturebox动画效果,刷新图像的闪烁问题解决方法