private static void Init(Graph g, Dictionary<int, int> mess) { int k = 0; foreach (Node n in g.nodes.Values) n.backList = new List<Node.weightedEdge>(); foreach (Node n in g.nodes.Values) { List<long> nbs = new List<long>(); List<Node.weightedEdge> nnewe = new List<Node.weightedEdge>(); foreach (Node.weightedEdge e in n.neighbourList) { if (nbs.Contains(e.neighbour.id)) e.state = 8; else { e.id = k; mess.Add(k, e.weight); k++; nnewe.Add(e); nbs.Add(e.neighbour.id); } } n.neighbourList = nnewe; } foreach (Node n in g.nodes.Values) { foreach (Node.weightedEdge e in n.neighbourList) { Node v = e.neighbour; Node.weightedEdge ed = new Node.weightedEdge(n); ed.weight = e.weight; ed.id = e.id; v.backList.Add(ed); bool newSym = true; //SYM foreach (Node.weightedEdge es in n.symList) if (es.neighbour.id == v.id) newSym = false; if (newSym) { n.AddSym(v); } newSym = true; //SYM foreach (Node.weightedEdge es in v.symList) if (es.neighbour.id == n.id) newSym = false; if (newSym) { v.AddSym(n); } } } }
public void GetEdges(string oneWay, string nodesDictS) { help++; int k = 0; char[] sep = new char[] { ',', ' ', '\t', '\r' }; string[] splitAr = nodesDictS.Split(sep, StringSplitOptions.RemoveEmptyEntries); Node node1, node2; long id1, id2; id1 = long.Parse(splitAr[k]); node1 = new Node(id1); if (!nodes.ContainsKey(id1)) { nodes.Add(id1, node1); } node1 = nodes[id1]; while (k < splitAr.Length - 1) { k++; id2 = long.Parse(splitAr[k]); node2 = new Node(id2); if (!nodes.ContainsKey(id2)) { nodes.Add(id2, node2); } node2 = nodes[id2]; bool newSym = true; foreach (Node.weightedEdge e in node1.symList) { if (e.neighbour.id == id2) { newSym = false; } } if (newSym) { node1.AddSym(node2); node2.AddSym(node1); } switch (oneWay) { case "no": node1.AddNeighbour(node2, oneWay); node2.AddNeighbour(node1, oneWay); node1.AddBack(node2, oneWay); node2.AddBack(node1, oneWay); break; case "yes": node1.AddNeighbour(node2, oneWay); node2.AddBack(node1, oneWay); break; case "-1": node2.AddNeighbour(node1, oneWay); node2.AddBack(node1, oneWay); break; default: node1.AddNeighbour(node2, oneWay); node2.AddBack(node1, oneWay); break; } node1 = node2; id1 = id2; } }