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; }