//set_distance //set ancestor public void Dijkstra_Init(List <dijkstra_node> graph, int startkonten) { //Debug.log("Dijkstra_Init"); dijkstra_node start_node_object = new dijkstra_node(); for (int i = 0; i < graph.Count; i++) { dijkstra_node node_to_edit = graph[i]; if (node_to_edit.node_id == startkonten) //für den startknoten setzte die distanz zu sich selber auf 0 und sich selber als vorgänger { node_to_edit.distance = 0.0f; node_to_edit.ancestor = startkonten; start_node_object = node_to_edit; node_to_edit.visited = false; } else { //für alle anderen knoten node_to_edit.distance = Mathf.Infinity; node_to_edit.ancestor = 0; } node_to_edit.visited = false; graph[i] = node_to_edit; } Dijkstra_Compute(graph, startkonten); for (int i = 0; i < graph.Count; i++) { dijkstra_node tmp = graph[i]; ///GameObject.Find("node_" + tmp.node_id.ToString()).GetComponent<path_point>().add_path_to_node(Dijkstra_Resolve_Path(graph, startkonten, tmp.node_id)); getNodeObjectById(tmp.node_id).GetComponent <path_point>().add_path_to_node(Dijkstra_Resolve_Path(graph, startkonten, tmp.node_id)); } }
//set_distance //set ancestor public void Dijkstra_Init(List<dijkstra_node> graph, int startkonten) { //Debug.log("Dijkstra_Init"); dijkstra_node start_node_object = new dijkstra_node(); for (int i = 0; i < graph.Count; i++) { dijkstra_node node_to_edit = graph[i]; if(node_to_edit.node_id == startkonten){ //für den startknoten setzte die distanz zu sich selber auf 0 und sich selber als vorgänger node_to_edit.distance = 0.0f; node_to_edit.ancestor = startkonten; start_node_object = node_to_edit; node_to_edit.visited = false; }else{ //für alle anderen knoten node_to_edit.distance = Mathf.Infinity; node_to_edit.ancestor = 0; } node_to_edit.visited = false; graph[i] = node_to_edit; } Dijkstra_Compute(graph, startkonten); for (int i = 0; i < graph.Count; i++) { dijkstra_node tmp = graph[i]; ///GameObject.Find("node_" + tmp.node_id.ToString()).GetComponent<path_point>().add_path_to_node(Dijkstra_Resolve_Path(graph, startkonten, tmp.node_id)); getNodeObjectById(tmp.node_id).GetComponent<path_point>().add_path_to_node(Dijkstra_Resolve_Path(graph, startkonten, tmp.node_id)); } }
private void set_ancestor_to_null() { for (int i = 0; i < dijkstra_node_list.Count; i++) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.ancestor = 0; dijkstra_node_list [i] = tmp; } }
private void set_distance_to_zero() { for (int i = 0; i < dijkstra_node_list.Count; i++) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.distance = 0.0f; dijkstra_node_list [i] = tmp; } }
private void set_distance_to_infinite() { for (int i = 0; i < dijkstra_node_list.Count; i++) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.distance = Mathf.Infinity; dijkstra_node_list [i] = tmp; } }
private void set_all_to_visited() { for (int i = 0; i < dijkstra_node_list.Count; i++) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.visited = true; dijkstra_node_list [i] = tmp; } }
private void set_node_ancestor_to(int id, int to) { for (int i = 0; i < dijkstra_node_list.Count; i++) { if (dijkstra_node_list [i].node_id == id) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.ancestor = to; dijkstra_node_list [i] = tmp; } } }
private void set_node_distance_to(int id, float to) { for (int i = 0; i < dijkstra_node_list.Count; i++) { if (dijkstra_node_list [i].node_id == id) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.distance = to; dijkstra_node_list [i] = tmp; } } }
private void mark_node_as_unvisited(int id) { for (int i = 0; i < dijkstra_node_list.Count; i++) { if (dijkstra_node_list [i].node_id == id) { dijkstra_node tmp = dijkstra_node_list [i]; tmp.visited = false; dijkstra_node_list [i] = tmp; //Debug.log ("der node " + id + " wurde auf besucht gesetzt"); } } }
private dijkstra_node get_node_component(int id) { dijkstra_node tmp = new dijkstra_node(); for (int i = 0; i < dijkstra_node_list.Count; i++) { if (dijkstra_node_list [i].node_id == id) { tmp = dijkstra_node_list [i]; return(tmp); } } return(tmp); }
//hier wird die edgelist in einen dijkstra_node konvertiert ein node beinhaltet: die eigene id, liste der nachbarn, list der edges zu den nachbarn mit der länge private void convert_edgelist_to_dijkstra_node_list() { check_connection_state_of_nodes(); //Debug.log ("convert edgelist :" + edgelist.Count.ToString ()); //alle List <int> individual_nodes = new List <int> (); individual_nodes.Clear(); dijkstra_node_list.Clear(); //clear list //hier teilen wir die edges in die nodes auf foreach (wp_edge n in edgelist) { bool war_drinnen = false; //adde alle anfgangspunkte foreach (int inode in individual_nodes) { if (inode == n.source_id) { war_drinnen = true; } } if (!war_drinnen) { individual_nodes.Add(n.source_id); } } foreach (wp_edge n in edgelist) { bool war_drinnen = false; //adde alle anfgangspunkte foreach (int inode in individual_nodes) { if (inode == n.dest_id) { war_drinnen = true; } } if (!war_drinnen) { individual_nodes.Add(n.dest_id); } } //hier für jeden gerade erzeugten node einen dijkstra_node erstellen dieser enthät alle infos für den graph foreach (int inode in individual_nodes) { dijkstra_node new_dnode = new dijkstra_node(inode); //Debug.log("new dnode : " + inode.ToString()); //alle edges hinzufügen foreach (wp_edge edge in edgelist) { if (edge.source_id == inode) { new_dnode.node_edges.Add(edge); //Debug.log(" neigh : " + edge.dest_id); new_dnode.neighbours.Add(edge.dest_id); } } new_dnode.log_info(); dijkstra_node_list.Add(new_dnode); } //Debug.log ("conversion complete : " + dijkstra_node_list.Count.ToString ()); Dijkstra_Init(dijkstra_node_list, 1); }
private dijkstra_node get_node_component(int id) { dijkstra_node tmp = new dijkstra_node (); for (int i = 0; i < dijkstra_node_list.Count; i++) { if (dijkstra_node_list [i].node_id == id) { tmp = dijkstra_node_list [i]; return tmp; } } return tmp; }
//hier wird die edgelist in einen dijkstra_node konvertiert ein node beinhaltet: die eigene id, liste der nachbarn, list der edges zu den nachbarn mit der länge private void convert_edgelist_to_dijkstra_node_list() { check_connection_state_of_nodes(); //Debug.log ("convert edgelist :" + edgelist.Count.ToString ()); //alle List<int> individual_nodes = new List<int> (); individual_nodes.Clear (); dijkstra_node_list.Clear (); //clear list //hier teilen wir die edges in die nodes auf foreach (wp_edge n in edgelist) { bool war_drinnen = false; //adde alle anfgangspunkte foreach (int inode in individual_nodes) { if (inode == n.source_id) { war_drinnen = true; } } if (!war_drinnen) { individual_nodes.Add (n.source_id); } } foreach (wp_edge n in edgelist) { bool war_drinnen = false; //adde alle anfgangspunkte foreach (int inode in individual_nodes) { if (inode == n.dest_id) { war_drinnen = true; } } if (!war_drinnen) { individual_nodes.Add (n.dest_id); } } //hier für jeden gerade erzeugten node einen dijkstra_node erstellen dieser enthät alle infos für den graph foreach (int inode in individual_nodes) { dijkstra_node new_dnode = new dijkstra_node (inode); //Debug.log("new dnode : " + inode.ToString()); //alle edges hinzufügen foreach (wp_edge edge in edgelist) { if (edge.source_id == inode) { new_dnode.node_edges.Add (edge); //Debug.log(" neigh : " + edge.dest_id); new_dnode.neighbours.Add (edge.dest_id); } } new_dnode.log_info(); dijkstra_node_list.Add (new_dnode); } //Debug.log ("conversion complete : " + dijkstra_node_list.Count.ToString ()); Dijkstra_Init(dijkstra_node_list, 1); }