Hello All,<br><br> I am trying to identify which edges can be a part
of perfect matching, given a graph that can hold multiple perfect
matching sets. I can find the edges for one configuration, but not the
other.<br><br>
For example, if a 7 ring and a 5 ring are flush (as in the Azulene
structure), then there is resonance, and two configuration of double
bonds (perfect matching edges in this case). The edge between the two
rings will never be part of a perfect set, under any configuration.<br>
<br> However, I am only seeing one set of perfect edges and never the
other. Even when I try to seed the other set by initializing a boolean edge
map, I only see one configuration. How can I make this work?<br clear="all">
<br> Please note: I am completely new to Lemon, and this bit of code is experimental.<br><br>#include <iostream><br>#include <lemon/list_graph.h><br>#include <lemon/matching.h><br>#include <lemon/concepts/graph.h><br>
#include <lemon/concepts/maps.h><br>#include <lemon/concepts/graph_components.h><br><div id=":142">#include <sstream><br>#include <vector><br>#include <queue><br>#include <cstdlib><br>
#include <lemon/smart_graph.h><br>
#include <lemon/lgf_reader.h><br>#include <lemon/math.h><br><br>using namespace std;<br>using namespace lemon;<br><br>GRAPH_TYPEDEFS(SmartGraph);<br><br>int main() {<br><br> ListGraph g;<br><br> ListGraph::Node a = g.addNode();<br>
ListGraph::Node b = g.addNode();<br> ListGraph::Node c = g.addNode();<br> ListGraph::Node d = g.addNode();<br> ListGraph::Node e = g.addNode();<br> ListGraph::Node f = g.addNode();<br> ListGraph::Node gee = g.addNode();<br>
ListGraph::Node h = g.addNode();<br> ListGraph::Node i = g.addNode();<br> ListGraph::Node j = g.addNode();<br><br> ListGraph::Edge ab = g.addEdge(a, b);<br> ListGraph::Edge bc = g.addEdge(c, b);<br> ListGraph::Edge cd = g.addEdge(c, d);<br>
ListGraph::Edge ed = g.addEdge(e, d);<br> ListGraph::Edge fb = g.addEdge(f, b);<br> ListGraph::Edge fg = g.addEdge(f, gee);<br> ListGraph::Edge gh = g.addEdge(gee, h);<br> ListGraph::Edge hi = g.addEdge(h, i);<br>
ListGraph::Edge ij = g.addEdge(j, i);<br> ListGraph::Edge ja = g.addEdge(j, a);<br> ListGraph::Edge ea = g.addEdge(e, a);<br><br> ListGraph::EdgeMap<bool> edgeMap(g);<br> edgeMap[ea] = true; //This never returns true after running!!!<br>
<br> MaxMatching<ListGraph> mat_test(g);<br> mat_test.matchingInit(edgeMap);<br> mat_test.startSparse();<br> mat_test.run();<br><br> cout << "STATUS EDGE AB: (should always be false) " << mat_test.matching(ab) << endl;<br>
cout << "STATUS EDGE BC: (should be opposite bool of EA) " << mat_test.matching(bc) << endl;<br> cout << "STATUS EDGE EA: (should be opposite bool of BC) " << mat_test.matching(ea) << endl;<br>
<br> return 0;<br>}</div><br clear="all"><br>Thank you for your time<br>