//Name, Matrikelnummer #include using namespace leda; using namespace std; GRAPH G; node s = nil; void run_bellmann_ford(GraphWin& gw) { // ... } void init_edge(GraphWin& gw, edge e) { G[e] = rand_int(-49,49); gw.set_slider_value(e,G[e]/100.0+0.5); } void init_handler(GraphWin& gw) { edge e; forall_edges(e,G) { init_edge(gw,e); } if(s==nil){ s = G.choose_node(); gw.set_label_type(s,user_label); gw.set_user_label(s,"s"); gw.set_shape(s,square_node); gw.set_width(s,20); gw.set_color(s,blue); } else if(gw.get_user_label(s)!="s"){ s = G.choose_node(); gw.set_label_type(s,user_label); gw.set_user_label(s,"s"); gw.set_shape(s,square_node); gw.set_width(s,20); gw.set_color(s,blue); } run_bellmann_ford(gw); } void new_edge_handler(GraphWin& gw, edge e) { init_edge(gw,e); run_bellmann_ford(gw); } void new_node_handler(GraphWin& gw, node v) { if(G.number_of_nodes() == 1) { s=v; gw.set_label_type(s,user_label); gw.set_user_label(s,"s"); gw.set_shape(s,square_node); gw.set_width(s,20); gw.set_color(s,blue); } run_bellmann_ford(gw); } bool pre_del_node_handler(GraphWin& gw, node v) { if(G.number_of_nodes() > 1) { if(v == s) { s = G.choose_node(); while(s == v) s = G.choose_node(); gw.set_label_type(s,user_label); gw.set_user_label(s,"s"); gw.set_shape(s,square_node); gw.set_width(s,20); gw.set_color(s,blue); } } else if(G.number_of_nodes() == 1){ s=nil; } return true; } void del_node_handler(GraphWin& gw) { run_bellmann_ford(gw); } void edge_slider_handler(GraphWin& gw, edge e, double f) { G[e] = static_cast(100*f-50); run_bellmann_ford(gw); } int main() { GraphWin gw(G); gw.set_node_label_type(data_label); gw.set_edge_label_type(data_label); gw.set_directed(true); gw.set_node_width(20); gw.set_init_graph_handler(init_handler); gw.set_new_edge_handler(new_edge_handler); gw.set_new_node_handler(new_node_handler); gw.set_del_edge_handler(run_bellmann_ford); gw.set_del_node_handler(pre_del_node_handler); gw.set_del_node_handler(del_node_handler); gw.set_edge_slider_handler(edge_slider_handler); gw.display(); gw.edit(); }