public static void AssignNewWeightsToNeighbors(DNode node) { //network.visitedNodesList.Last() //find neighbors foreach (DNode neighbor in node.GetNeighbors()) { if (!neighbor.IsVisited()) { //assign combined weight of connecting edge and previous node //to neighbor if it's smaller than the current weight of neighbor int edgeWeight = GetWeightFromEdge(node, neighbor); int prevWeight = node.GetWeight(); int weight = neighbor.GetWeight(); if ((edgeWeight + prevWeight) < weight) { weight = (edgeWeight + prevWeight); neighbor.AddPreviousNode(ref node); } neighbor.SetWeight(weight); } } }
public static void MakeArraysForTable(DNode node, int discovery) { foreach (DNode neighbor in node.GetNeighbors()) { String name1 = neighbor.GetNodeName(); String weight1 = neighbor.GetWeight().ToString(); if (!neighbor.IsVisited()) { String prev = neighbor.GetPreviousNode().GetNodeName(); weight1 = weight1 + ", " + prev; } switch (name1) { //case "u": break; case "v": dv[discovery] = weight1; break; case "w": dw[discovery] = weight1; break; case "x": dx[discovery] = weight1; break; case "y": dy[discovery] = weight1; break; case "z": dz[discovery] = weight1; break; } } foreach (DNode nd in network.nodesList) { String name = nd.GetNodeName(); String weight = nd.GetWeight().ToString(); //unreachable nodes //∞ if (weight == "999999999") { weight = "∞"; switch (name) { //case "u": break; case "v": dv[discovery] = weight; break; case "w": dw[discovery] = weight; break; case "x": dx[discovery] = weight; break; case "y": dy[discovery] = weight; break; case "z": dz[discovery] = weight; break; } } //already visited nodes else if (nd.IsVisited()) { weight = "-"; switch (name) { //case "u": break; case "v": dv[discovery] = weight; break; case "w": dw[discovery] = weight; break; case "x": dx[discovery] = weight; break; case "y": dy[discovery] = weight; break; case "z": dz[discovery] = weight; break; } } //nodes that stay the same weight else { switch (name) { //case "u": break; case "v": if (dv[discovery] == "#") { dv[discovery] = dv[discovery - 1]; } break; case "w": if (dw[discovery] == "#") { dw[discovery] = dw[discovery - 1]; } break; case "x": if (dx[discovery] == "#") { dx[discovery] = dx[discovery - 1]; } break; case "y": if (dy[discovery] == "#") { dy[discovery] = dy[discovery - 1]; } break; case "z": if (dz[discovery] == "#") { dz[discovery] = dz[discovery - 1]; } break; } } } /* * //D(v), D(w), D(x), D(y), D(z) * foreach (DNode neighbor in node.GetNeighbors()) * { * Debug.WriteLine("TEST"); * String name = neighbor.GetNodeName(); * String weight = neighbor.GetWeight().ToString(); * if (neighbor.IsVisited()) * { * weight = "-"; * } * else { * String prev = neighbor.GetPreviousNode().GetNodeName(); * weight = weight + ", " + prev; * } * * switch (name) * { * //case "u": break; * case "v": dv[discovery] = weight; break; * case "w": dw[discovery] = weight; break; * case "x": dx[discovery] = weight; break; * case "y": dy[discovery] = weight; break; * case "z": dz[discovery] = weight; break; * } * }*/ }