public void SetWeights()
        {
            foreach (Node n1 in nodes.Values)
            {
                for (int i = 0; i < n1.symList.Count; i++)

                {
                    Node.weightedEdge edge    = n1.symList[i];
                    double            weightD = n1.GetDistanceUTM(edge.neighbour) * 10000;
                    int weight = Math.Max(1, (int)weightD);
                    edge.SetWeight(weight);

                    Node b = edge.neighbour;
                }
            }
        }
        public static void MergeEdges(Graph g, List <long> sep)
        {
            int  weigth = 0;
            Node last, next;
            Dictionary <long, Node> nodesM = new Dictionary <long, Node>();

            foreach (Node n in g.nodes.Values)
            {
                n.neighbourList = n.symList;
            }
            foreach (Node n in g.nodes.Values)
            {
                //    if (!n.inside)
                if (false)
                {
                    Node outN;
                    if (!nodesM.TryGetValue(n.id, out outN))
                    {
                        nodesM.Add(n.id, n);
                    }
                }
                else if (HasHighDegree(n, sep))
                {
                    List <Node.weightedEdge> path = new List <Node.weightedEdge>();

                    foreach (Node.weightedEdge e in n.neighbourList)
                    {
                        last = n;
                        path = new List <Node.weightedEdge>();
                        bool end = false;
                        next = e.neighbour;

                        weigth  = e.weight;
                        e.state = 1;
                        path.Add(e);
                        while ((!end))
                        {
                            if ((!HasHighDegree(next, sep)))
                            {
                                if (next.neighbourList.Count == 0)
                                {
                                    end = true;
                                    break;
                                }
                                Node.weightedEdge e2 = next.neighbourList[0];
                                if ((e2.state == 0) && (e2.neighbour.id != last.id))
                                {
                                    last = next;
                                    next = e2.neighbour;
                                }
                                else if (next.neighbourList.Count > 1) //never
                                {
                                    e2   = next.neighbourList[1];
                                    last = next;
                                    next = e2.neighbour;
                                }
                                else //pro kontrolu
                                {
                                    end = true;
                                    break;
                                }
                                path.Add(e2);
                                e2.state = 1;
                                weigth   = weigth + e2.weight;
                            }
                            else
                            {
                                end = true;
                            }
                        }
                        foreach (Node.weightedEdge e3 in path)
                        {
                            e3.state = 0;
                        }
                        Node.weightedEdge edge = new Node.weightedEdge(next);
                        edge.SetWeight(weigth);
                        n.mList.Add(edge);
                    }
                    nodesM.Add(n.id, n);
                }
            }
            double dN = 0;

            foreach (Node n in nodesM.Values)
            {
                List <Node.weightedEdge> backList2 = new List <Node.weightedEdge>();

                n.backList = backList2;

                n.symList       = new List <Node.weightedEdge>();
                n.neighbourList = n.mList;
                n.mList         = new List <Node.weightedEdge>();
                foreach (Node.weightedEdge e in n.neighbourList)
                {
                    Node.weightedEdge f = new Node.weightedEdge(n);
                    f.weight = e.weight;
                    e.neighbour.backList.Add(f);
                }
            }
            g.nodes = nodesM;
        }