mirror of https://github.com/dnomd343/klotski.git
				
				
			
				 2 changed files with 45 additions and 2 deletions
			
			
		@ -0,0 +1,43 @@ | 
				
			|||||
 | 
					#!/usr/bin/env python3 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import igraph as ig | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					def split_max_graph(g: ig.Graph, cut_point: int): | 
				
			||||
 | 
					    gg = g.copy() | 
				
			||||
 | 
					    edges = [(cut_point, x.index) for x in gg.vs[cut_point].neighbors()] | 
				
			||||
 | 
					    gg.delete_edges(edges) | 
				
			||||
 | 
					    components = sorted(gg.components(), key=lambda x: -len(x)) | 
				
			||||
 | 
					    return g.subgraph(components[0] + [cut_point]) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					def split_subgraph(g: ig.Graph): | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    # def demo(): | 
				
			||||
 | 
					    #     sizes = set() | 
				
			||||
 | 
					    #     for cut_point in g.articulation_points(): | 
				
			||||
 | 
					    #         gg: ig.Graph = g.copy() | 
				
			||||
 | 
					    #         gg.delete_vertices(cut_point) | 
				
			||||
 | 
					    #         subs = gg.decompose() | 
				
			||||
 | 
					    #         sizes.update([x.vcount() for x in subs]) | 
				
			||||
 | 
					    #     print(sorted(sizes)) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    # demo() | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    for _ in range(1034): | 
				
			||||
 | 
					        print(g.vcount(), g.ecount()) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        points = g.articulation_points() | 
				
			||||
 | 
					        assert len(points) > 0 | 
				
			||||
 | 
					        g = split_max_graph(g, points[0]) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    # ig.plot(g, 'demo.png', bbox=(2000, 2000)) | 
				
			||||
 | 
					    print(g.vcount(), g.ecount()) | 
				
			||||
 | 
					    # g.write_graphml('main_cir.graphml') | 
				
			||||
 | 
					    g.write_pickle('main_cir.pkl') | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					if __name__ == '__main__': | 
				
			||||
 | 
					    raw = ig.Graph.Read_Pickle('main_combined.pkl') | 
				
			||||
 | 
					    # print(raw.vcount()) | 
				
			||||
 | 
					    split_subgraph(raw) | 
				
			||||
					Loading…
					
					
				
		Reference in new issue