[Lemon-commits] deba: r3232 - lemon/trunk/demo

Lemon SVN svn at lemon.cs.elte.hu
Wed Mar 7 13:00:59 CET 2007


Author: deba
Date: Wed Mar  7 13:00:59 2007
New Revision: 3232

Added:
   lemon/trunk/demo/steiner.lgf
   lemon/trunk/demo/steiner_demo.cc
Modified:
   lemon/trunk/demo/Makefile.am

Log:
Steiner 2-approximation demo



Modified: lemon/trunk/demo/Makefile.am
==============================================================================
--- lemon/trunk/demo/Makefile.am	(original)
+++ lemon/trunk/demo/Makefile.am	Wed Mar  7 13:00:59 2007
@@ -12,8 +12,9 @@
 	demo/simann_maxcut_demo.lgf \
 	demo/strongly_connected_orientation.lgf \
 	demo/sub_gad_input.lgf \
-	demo/u_components.lgf
-	
+	demo/u_components.lgf \
+	demo/steiner.lgf
+
 if WANT_DEMO
 
 noinst_PROGRAMS += \
@@ -39,7 +40,8 @@
 	demo/topological_ordering \
 	demo/simann_maxcut_demo \
 	demo/disjoint_paths_demo \
-	demo/strongly_connected_orientation
+	demo/strongly_connected_orientation \
+	demo/steiner_demo
 
 if HAVE_GLPK
 noinst_PROGRAMS += demo/lp_demo demo/lp_maxflow_demo demo/mip_demo
@@ -107,3 +109,5 @@
 demo_disjoint_paths_demo_SOURCES = demo/disjoint_paths_demo.cc
 
 demo_strongly_connected_orientation_SOURCES = demo/strongly_connected_orientation.cc
+
+demo_steiner_demo_SOURCES=demo/steiner_demo.cc
\ No newline at end of file

Added: lemon/trunk/demo/steiner.lgf
==============================================================================
--- (empty file)
+++ lemon/trunk/demo/steiner.lgf	Wed Mar  7 13:00:59 2007
@@ -0,0 +1,303 @@
+ at nodeset 
+coordinates_x	coordinates_y	label	terminal	
+-251.856	-202.321	0	1	
+-331.765	100.719 	1	0	
+-273.677	-294.883	2	0	
+-377.147	-85.369 	3	0	
+169.068	        132.547 	4	0	
+453.494	        43.7303 	5	0	
+350.694	        -81.2848	6	0	
+-295.393	211.455 	7	0	
+-231.281	-62.2543	8	0	
+275.941	        118.221 	9	0	
+311.816	        220.248 	10	0	
+234.152	        -433.718	11	0	
+146.458	        422.137 	12	0	
+105.796	        -281.078	13	0	
+-284.598	-120.027	14	0	
+321.329	        295.308 	15	0	
+47.3951	        306.406 	16	0	
+-189.908	-188.032	17	0	
+-15.3932	-179.904	18	0	
+-178.559	80.3029 	19	0	
+231.219	        332.276 	20	0	
+314.277	        -37.9572	21	0	
+412.918	        91.483  	22	1	
+-288.281	10.409  	23	0	
+-265.853	-415.164	24	1	
+357.609	        -190.755	25	0	
+170.989	        275.074 	26	1	
+-454.346	132.702 	27	1	
+37.385	        -21.8462	28	0	
+157.624	        325.213 	29	0	
+349.774	        22.435  	30	0	
+-53.4642	-78.4002	31	0	
+-209.404	-275.264	32	0	
+226.943	        93.2239 	33	0	
+-415.266	-226.887	34	0	
+-268.299	152.735 	35	0	
+80.0752	        337.882 	36	0	
+-107.322	-328.854	37	0	
+118.71	        -56.0308	38	1	
+257.804	        417.75  	39	0	
+-5.41726	302.825 	40	0	
+-319.74	        -186.925	41	0	
+275.381	        277.069 	42	0	
+-273.248	319.744 	43	0	
+-43.6017	-208.328	44	0	
+166.639	        -134.903	45	0	
+-54.1813	323.637 	46	0	
+286.634	        57.5531 	47	0	
+426.828	        245.989 	48	0	
+-357.602	220.391 	49	0	
+135.626	        372.331 	50	0	
+-21.8318	430.892 	51	0	
+-406.689	46.2421 	52	0	
+-246.874	262.591 	53	0	
+-370.766	-20.5267	54	0	
+-14.7567	-328.157	55	0	
+387.598	        40.9046 	56	0	
+-279.35	        -247.789	57	1	
+116.726	        284.452 	58	0	
+440.353	        141.885 	59	0	
+-171.65	        355.372 	60	1	
+-207.145	-368.556	61	0	
+-369.168	178.735 	62	1	
+-45.5162	85.4527 	63	0	
+135.203 	71.4192 	64	0	
+-351.597	-250.799	65	0	
+-453.398	-15.6638	66	0	
+234.039	        -359.178	67	0	
+-346.344	349.928 	68	0	
+4.38307	        40.7204 	69	0	
+224.516	        249.259 	70	0	
+-105.49	        22.5721 	71	1	
+147.119 	-215.924	72	0	
+-408.527       	96.861  	73	0	
+-99.522 	268.879 	74	0	
+-1.57169	363.155 	75	0	
+347.538 	92.4063 	76	0	
+353.409 	183.093 	77	0	
+416.442 	-69.8499	78	0	
+-58.1027        -422.666	79	0	
+227.968 	-76.286 	80	0	
+-323.979        42.9237 	81	0	
+84.2308 	-199.473	82	0	
+56.538  	-83.469 	83	0	
+244.34  	-234.403	84	0	
+-361.409        -146.916	85	0	
+395.636 	189.561 	86	0	
+-89.832 	464.4   	87	0	
+230.042 	199.124 	88	0	
+-93.6872	145.66  	89	1	
+-202.746	-118.087	90	0	
+-57.6298 	207.792 	91	0	
+377.074 	298.05  	92	0	
+-111.722	83.101  	93	0	
+279.51  	-133.648	94	0	
+66.5975 	494.601 	95	1	
+105.518 	204.789 	96	0	
+-324.108	-84.4418	97	1	
+-183.456	440.555 	98	0	
+177.565 	215.632 	99	0	
+ at uedgeset 
+		label	
+38	28	0	
+56	5	2	
+75	16	3	
+40	16	4	
+92	48	5	
+74	53	8	
+88	70	9	
+68	43	10	
+58	26	11	
+69	31	12	
+14	0	13	
+61	37	14	
+73	27	16	
+59	5	17	
+17	0	18	
+29	26	19	
+56	22	21	
+21	6	22	
+55	37	24	
+61	32	26	
+57	0	27	
+93	89	28	
+82	45	29	
+94	80	30	
+38	31	31	
+91	89	32	
+37	32	33	
+66	52	34	
+59	22	35	
+65	41	36	
+99	58	37	
+44	18	38	
+62	49	40	
+83	45	41	
+33	4	42	
+93	63	43	
+50	29	44	
+85	3	45	
+98	87	46	
+81	23	47	
+9	4	48	
+86	48	49	
+69	28	50	
+81	54	51	
+46	40	52	
+84	67	53	
+75	36	56	
+47	33	58	
+77	10	59	
+90	14	60	
+75	46	62	
+81	1	63	
+26	20	64	
+70	4	65	
+97	3	66	
+88	10	67	
+58	50	68	
+92	86	70	
+47	9	71	
+90	8	75	
+49	7	76	
+54	23	77	
+91	35	79	
+42	10	80	
+65	34	81	
+51	50	82	
+86	77	83	
+76	30	84	
+99	20	86	
+42	15	87	
+42	20	88	
+64	38	89	
+78	6	90	
+47	30	91	
+67	11	93	
+78	30	94	
+64	28	95	
+82	72	96	
+76	9	97	
+72	13	98	
+86	59	100	
+69	63	102	
+91	74	103	
+62	7	105	
+44	37	106	
+51	12	107	
+76	56	108	
+50	12	109	
+95	51	110	
+35	19	111	
+30	21	112	
+88	9	113	
+98	60	114	
+73	62	115	
+70	42	117	
+71	63	118	
+85	34	121	
+97	54	122	
+20	15	123	
+39	20	124	
+65	2	125	
+76	59	126	
+90	17	127	
+77	76	129	
+57	41	130	
+23	8	131	
+71	19	132	
+78	56	133	
+91	53	134	
+53	46	135	
+80	21	137	
+72	45	138	
+97	8	139	
+94	25	141	
+62	27	142	
+58	36	144	
+93	71	145	
+57	2	146	
+92	10	147	
+88	77	148	
+91	63	149	
+17	2	152	
+73	1	153	
+55	18	155	
+50	20	157	
+66	54	158	
+51	36	159	
+78	5	160	
+99	70	161	
+87	60	162	
+60	53	163	
+97	85	164	
+97	14	166	
+89	19	167	
+82	18	169	
+85	41	170	
+99	96	171	
+73	52	172	
+92	15	173	
+81	52	174	
+83	18	176	
+41	14	178	
+32	17	179	
+96	36	180	
+74	40	182	
+7	1	183	
+39	12	185	
+94	6	187	
+83	38	188	
+24	2	189	
+32	18	190	
+66	3	192	
+71	31	194	
+68	49	203	
+23	19	204	
+43	7	208	
+96	16	209	
+61	2	210	
+96	4	211	
+64	45	212	
+91	16	213	
+84	72	214	
+66	27	215	
+67	13	216	
+71	8	217	
+19	1	218	
+87	46	219	
+94	72	220	
+84	25	221	
+60	43	222	
+18	13	225	
+35	7	226	
+51	46	227	
+80	47	229	
+80	45	230	
+79	55	231	
+90	71	232	
+64	47	233	
+64	4	234	
+53	7	236	
+64	63	237	
+98	68	238	
+79	61	239	
+96	63	242	
+78	25	243	
+31	18	244	
+90	18	245	
+13	11	246	
+95	39	247	
+95	87	250	
+79	24	251	
+66	34	252	
+92	39	253	
+79	13	254	
+34	24	255	
+68	27	256	
+25	11	257	
+24	11	259	
+ at end

Added: lemon/trunk/demo/steiner_demo.cc
==============================================================================
--- (empty file)
+++ lemon/trunk/demo/steiner_demo.cc	Wed Mar  7 13:00:59 2007
@@ -0,0 +1,84 @@
+#include <lemon/smart_graph.h>
+#include <lemon/kruskal.h>
+#include <lemon/graph_reader.h>
+#include <lemon/time_measure.h>
+#include <lemon/graph_to_eps.h>
+
+#include <lemon/steiner.h>
+
+#include <cstdlib>
+#include <cmath>
+
+using namespace lemon;
+using namespace lemon::dim2;
+
+using namespace std;
+
+int main(int argc, const char *argv[]) {
+  std::string lgf = argc > 1 ? argv[1] : "steiner.lgf";
+  std::string eps = argc > 2 ? argv[2] : "steiner.eps";
+
+  SmartUGraph graph;
+  SmartUGraph::NodeMap<bool> terminal(graph);
+  SmartUGraph::NodeMap<int> label(graph);
+  SmartUGraph::NodeMap<Point<double> > coord(graph);
+  
+  UGraphReader<SmartUGraph>(lgf, graph).
+    readNodeMap("coordinates_x", xMap(coord)).
+    readNodeMap("coordinates_y", yMap(coord)).
+    readNodeMap("terminal", terminal).run();
+
+  SmartUGraph::UEdgeMap<double> cost(graph);
+  for (SmartUGraph::UEdgeIt it(graph); it != INVALID; ++it) {
+    cost[it] = sqrt((coord[graph.target(it)] - 
+                     coord[graph.source(it)]).normSquare());
+  }
+  
+  SteinerTree<SmartUGraph> steiner(graph, cost);
+  steiner.init();
+
+  for (SmartUGraph::NodeIt it(graph); it != INVALID; ++it) {
+    if (terminal[it]) {
+      steiner.addTerminal(it);
+    }
+  }
+  steiner.start();
+
+
+  Palette nodepalette(0);
+  nodepalette.add(Color(1.0, 1.0, 1.0));
+  nodepalette.add(Color(0.0, 1.0, 0.0));
+  nodepalette.add(Color(0.5, 0.5, 0.5));
+  SmartUGraph::NodeMap<int> nodecolor(graph);
+  for (SmartUGraph::NodeIt it(graph); it != INVALID; ++it) {
+    if (steiner.terminal(it)) {
+      nodecolor[it] = 1;
+    } else if (steiner.steiner(it)) {
+      nodecolor[it] = 2;
+    } else {
+      nodecolor[it] = 0;
+    }
+  }
+
+
+  Palette edgepalette(0);
+  edgepalette.add(Color(0.0, 0.0, 0.0));
+  edgepalette.add(Color(1.0, 0.0, 0.0));
+  SmartUGraph::UEdgeMap<int> edgecolor(graph);
+  for (SmartUGraph::UEdgeIt it(graph); it != INVALID; ++it) {
+    edgecolor[it] = steiner.tree(it) ? 1 : 0;
+  }
+
+
+  graphToEps(graph, eps).
+    coords(coord).undirected().
+    nodeScale(1.0).scaleToA4().
+    nodeColors(composeMap(nodepalette, nodecolor)).
+    edgeColors(composeMap(edgepalette, edgecolor)).
+    nodeTexts(label).nodeTextSize(8).run();
+
+  std::cout << "The tree constructed: " << eps << std::endl;
+  std::cout << "The cost of the tree: " << steiner.treeValue() << std::endl;
+
+  return 0;
+}



More information about the Lemon-commits mailing list