示例#1
0
    //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));
        }
    }
示例#3
0
 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;
     }
 }
示例#4
0
 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;
     }
 }
示例#5
0
 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;
     }
 }
示例#6
0
 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;
     }
 }
示例#7
0
 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;
         }
     }
 }
示例#8
0
 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;
         }
     }
 }
示例#9
0
 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");
         }
     }
 }
示例#10
0
    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);
    }
示例#11
0
    //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);
    }
示例#12
0
 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;
 }
示例#13
0
 //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);
 }