You are on page 1of 2

TestCompatibility( G, H ) { | For( each v in G.V ) { | | v.color = white; // keeps track of visited vertices | | v.

flip = 0; // keeps track of edge color flips encountered | } | | Compatible = True; | | For( each v in G.V ) { | | If( v.color == white ) | | | DfsAlt( G, H, v , 1); | } | | Return Compatible; } DfsAlt( A, B, u, first ) { | u.color = gray; | | For( u -> w in A.E ) { | | If( w.color == white ) { | | | w.flip = u.flip; // path doesn't change colors | | | DfsAlt( A, B, u, 0 ); | | } | | | | Else If( w.color == gray && u.flip - v.flip <= 2 ) { // cycle with no more than 2 flips <2 when an | | | Compatible = False; // input graph is not a DAG | | | Return; | | } | } | | For( u -> w in B.E ) { | | If( w.color == white ) { | | | if( first ) w.flip = u.flip; // if we are leaving starting node of path, don't count as a flip | | | else w.flip = u.flip + 1; // else, count a flip since previous edge of path was diff. color | | | DfsAlt( B, A, u, 0 ); | | } | | | | Else If( w.color == gray && u.flip + 1 - w.flip <= 2 ) { // +1 since we don't get to count this last flip

| | | | | | }

| | | }

| | }

Compativle = False; Return;

u.color = black;

You might also like