function getMenorCompensacaoDeFluxo($lista, $matrizJusante, $noInicial, $noFinal) { $noVisitado = $noFinal; $i = 0; while ($i < count($lista)) { $sinal = substr($lista[$noVisitado], 0, 1); $no = trim(substr($lista[$noVisitado], 1, strlen($lista[$noVisitado]))); $ponteiro = getPonteiroConexao($no, $noVisitado, $matrizJusante); if ($sinal == "+") { // SE O NO FOI ROTULADO POSITIVAMENTE $diff = $matrizJusante[$ponteiro][2] - $matrizJusante[$ponteiro][3]; if (empty($menorCompensacao)) { $menorCompensacao = $diff; } elseif ($noVisitado != $noInicial && $diff <= $menorCompensacao) { $menorCompensacao = $diff; } if ($noVisitado == $noInicial) { //Chegou no inicio da lista break; } else { //Ainda não chegou no inicio da lista $noVisitado = trim(substr($lista[$noVisitado], 1, strlen($lista[$noVisitado]))); } } $i++; } return $menorCompensacao; }
$compensacao = getMenorCompensacaoDeFluxo($lista, $matrizJusante, $noInicial, $noFinal); while (count($lista) > 0) { $sinalCompensacao = substr($lista[$noVisitado], 0, 1); #Localizo o indice da conexao na matriz de jusante analiso a capacidade e o fluxo #Analisando o sinal da compensacao e compensando o fluxo alocando e/ou desalocando novos fluxos na matriz de Jusante e montante if ($sinalCompensacao == "+") { $seta = "->"; $no = trim(substr($lista[$noVisitado], 1, strlen($lista[$noVisitado]))); $ponteiroJusante = getPonteiroConexao($no, $noVisitado, $matrizJusante); if ($noVisitado != $noInicial) { $matrizJusante[$ponteiroJusante][3] += $compensacao; } } else { $seta = "<-"; $no = trim(substr($lista[$noVisitado], 1, strlen($lista[$noVisitado]))); $ponteiroJusante = getPonteiroConexao($noVisitado, $no, $matrizJusante); $matrizJusante[$ponteiroJusante][3] -= $compensacao; } $matrizMontante = geraMatrizMontante($matrizJusante); //Atualizo a Matriz Montante #IMPRIMINDO ROTA FLUXO if ($noVisitado == $noInicial) { //Chegou no inicio da lista $str = $noVisitado . $str; break; } else { //Ainda não chegou no inicio da lista $str = $seta . $noVisitado . $str; $noVisitado = trim(substr($lista[$noVisitado], 1, strlen($lista[$noVisitado]))); } }