Olá pessoal,
Eu estou implementando o algoritmo de Floyd Warshall
para submeter no sistema UVA JUDGE e gostaria de pedir
uma ajuda eu não estou conseguindo fazer com o Algoritmo de
Floy Warshall execute corretamente. Será que alguém pode me dar uma ajuda?
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class WeShipCheap {
static int[][] matriz;
static final Integer INFINITO = Integer.MAX_VALUE;
//Método que atribui o valor infinito para todas as posições da matriz
static void infinitza(int tam) {
int i, j;
for (i = 0; i < tam; i++) {
for (j = 0; j < tam; j++) {
matriz[i][j] = INFINITO;
}
}
for (i = 0; i < tam; i++) {
matriz[i][i] = 0;
}
}
//Método que implementa o algoritmo de Floyd-Warshall
static void floyd(int tam) {
int i, j, k;
for (k = 0; k < tam; k++) {
for (i = 0; i < tam; i++) {
for (j = 0; j < tam; j++) {
if (matriz[i][j] > matriz[i][k] + matriz[k][j]) {
matriz[i][j] = matriz[i][k] + matriz[k][j];
}
}
}
}
}
static void imprimeMatriz(int valorMax){
int i = 0;
int j = 0;
for (i = 0; i < valorMax; i++) {
for (j = 0; j < valorMax; j++) {
System.out.print(matriz[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int i = 0;
int j = 0;
int numConexoes = 0;
String origem = null;
String destino = null;
int valorMax = 0;
List<String> listaNos = new ArrayList<String>();
int[] listaAux = null;
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
numConexoes = scanner.nextInt();
for (i = 0; i < numConexoes + 1; i++) {
origem = scanner.next();
destino = scanner.next();
listaNos.add(origem);
listaNos.add(destino);
}
listaAux = new int[listaNos.size()];
for (i = 0; i < listaNos.size(); i++) {
String no = listaNos.get(i);
for (j = 0; j < listaNos.size(); j++) {
if(no.equals(listaNos.get(j))){
listaAux[j] = listaNos.indexOf(no);
valorMax = listaNos.indexOf(no);
}
}
}
valorMax = valorMax + 1;
matriz = new int[valorMax][valorMax];
infinitza(valorMax);
System.out.println(listaNos);
for (i = 0; i < listaAux.length; i++) {
System.out.print(listaAux[i] + " ");
}
System.out.println();
System.out.println(valorMax);
System.out.println();
for (i = 0; i < valorMax - 1; i++) {
matriz[listaAux[i]][listaAux[i+1]] = matriz[listaAux[i+1]][listaAux[i]] = 1;
}
//floyd(valorMax);
System.out.println();
imprimeMatriz(valorMax);
}
}
}
[]'s.