bool checkForwardCircuits(NodePosition sourcePosition, ref Type[,] connections, Direction initialDirection, ref HashSet <NodePosition> discovered) { shortCircuit = false; bool finished = false; validPath = new Stack <NodePosition>(); //checks if children made a correct connection to goal or not bool notConnected = false; //begin initializing Stack search case with first source node List <NodePosition> adjacentConnectors = CircuitComponent.adjMatrix(sourcePosition, initialDirection); switch (initialDirection) { case Direction.Left: break; case Direction.Up: break; case Direction.Right: break; case Direction.Down: break; } return(false); }
void Dfs(NodePosition position, Direction dir) { List <NodePosition> list = CircuitComponent.adjMatrix(position, dir); int dirRep = 0; switch (dir) { case Direction.Left: dirRep = 0; break; case Direction.Up: dirRep = 1; break; case Direction.Right: dirRep = 2; break; case Direction.Down: dirRep = 3; break; } int count = 0; foreach (NodePosition pos in list) { if (connections[pos.x, pos.y] == Type.Wires) { Dfs(pos, direction [dirRep][count]); break; } else if (connections[pos.x, pos.y] == Type.Goal) { lightBulbPass++; Dfs(pos, direction [dirRep][count]); break; } else if (connections[pos.x, pos.y] == Type.Battery) { if (lightBulbPass >= numberOfLightBulb) { Debug.Log(lightBulbPass); win = true; } else { win = false; } } else if (count <= 2) { count++; } } }
bool checkForwardCircuits(NodePosition sourcePosition, ref Type[,] connections, Direction initialDirection, ref HashSet <NodePosition> discovered) { //NOTE: adjacentConnectors must start at lenght of 3; conditionals and loops assume the initial size to be 3 List <NodePosition> adjacentConnectors; path = new Stack <NodePosition>(); Direction direction = initialDirection; Direction currentDirection = initialDirection; NodePosition currentPosition = sourcePosition; int x = 0; int conditional = 0; shortCircuit = false; bool finished = false; //checks if children made a correct connection to goal or not bool notConnected = false; //begin initializing Stack search case with first source node positionStack.Push(sourcePosition); directionStack.Push(direction); while ((positionStack.Count > 0) && (!finished)) { adjacentConnectors = CircuitComponent.adjMatrix(currentPosition, direction); initialDirection = directionSequence[(int)direction][x]; switch (direction) { case Direction.Left: foreach (NodePosition nextPosition in adjacentConnectors) { conditional = validateConnections(nextPosition, ref connections, direction, ref discovered); if (conditional % 2 == 0) { if (conditional == 0) { notConnected = false; } else { notConnected = false; path.Push(nextPosition); positionStack.Push(nextPosition); directionStack.Push(direction); discovered.Add(nextPosition); } } else { if (conditional < 0) { shortCircuit = true; finished = true; } else { //nextPosition already added to discovered in validateConnections() method (only if it wasn't already in the discovered set) } } x++; } break; case Direction.Up: break; case Direction.Right: break; case Direction.Down: break; } if (notConnected) { path.Pop(); } } return(false); }