Пример #1
0
// solve command in 'Rparser' class
void NodeList:: solve() {
    bool isDone = false;

    while (!isDone) {
        isDone = true;
        for (Node *curr = head; curr != NULL; curr = curr->next ) {

            if (!(curr->isSet)) {

                double newVoltage = solveHelper(curr);
                double change = abs (newVoltage - curr->getVoltage());
                curr->setVoltage(newVoltage);
            
                // unless any change in voltage > 0.0001, isDone is kept 'true'
                if (change > MIN_ITERATION_CHANGE)
                    isDone = false;
            }
        }
    }

    Node *curr = head;
    while (curr != NULL) {
        //print if the node's resistorList has more than one resistor
        if (curr->getResistorList().getNumRes() != 0)
                cout << " Node "<< curr->nodeId << ": "<<curr->voltage<< " V"<<endl;

        curr = curr->next;
    }

}
Пример #2
0
bool Sudoku::solveHelper(int row, int col) {
  if( board[row][col] == 0 ){
    for(int k=1; k<10; k++){
      board[row][col] = k;
      if( isValid(row, col) ){
        if( row == 8 && col == 8 ) return true; //at end of puzzle; last square
        else if( col == 8 ) { //jump to next row if at end of columns
          if( solveHelper(row+1, 0) ) return true; 
          else board[row][col] = 0;
        }
        else if( solveHelper(row, col+1) ) return true; //else increment column 
        else board[row][col] = 0;
      }
      else board[row][col] = 0; //reset for next number
      if( k==9 ) return false; //if no numbers fit
    }
  }
  if(row == 8 && col == 8 ) return true; 
  else if( col == 8 ) return solveHelper(row+1, 0);
  else return solveHelper(row, col+1);
} 
Пример #3
0
bool Sudoku::solve(){
  return solveHelper(0, 0);
}