Brunojti:
o problema era esse mesmo? da declaração de matriz?
Na Main, você nao precisa declarar tantos Scanners. Basta um:
String cidadex, cidadey;
Scanner leitor = new Scanner (System.in);
System.out.println("Digite a cidade de Origem");
cidadex= leitor.nextLine();
# System.out.println("Digite a cidade de Destino");
# cidadey=leitor.nextLine();
Não sei como está o resto da sua Main, então aconselho o seguinte. Instancie um objeto do tipo grafo, e a partir dele você invoca os métodos desejados. Se o código de Floyd estiver correto, para exibir o menor caminho (matriz) é preciso que na Main exista uma matriz e que nela seja guardado o retorno do método floyd.
Grafo g1 = new Grafo(5); // suponha 5 vertices
int m1 [][]=new int[5][5];
m1 = g1.floyd(cidadex,cidadey); // m1 recebe o retorno do método floyd
for(int l=0;l<5;l++){
for(int c=0;c<5;c++){ // lê os valores da matriz
System.out.print(m1[ l ][ c ]+" ");
}
System.out.println();
}
Não testei aqui, mas creio q vá funcionar!
Abraços
Floyd esta desta forma no código
public int [][] floyd2 (String a, String b){
//ROTINA fw(Inteiro[1..n,1..n] grafo)
int i,k,j;
int dist [][] = new int[this.elementos][this.elementos];
int [][]pred = new int[this.elementos][this.elementos];
int aux [][] = new int[this.elementos][this.elementos];
// VAR Inteiro[1..n,1..n] pred;
for(i=0;i<this.elementos;i++){
for(j=0;j<this.elementos;j++){
dist[i][j] = this.adj[i][j];
if (dist[i][j] < Integer.MAX_VALUE) {
pred[i][j] = i;
}
}
}
//Laço principal do aloritmo
for(k=0;k<this.elementos;k++){
for(i=0;i<this.elementos;i++){
for(j= 0;j<this.elementos;j++){
if( dist[i][j] > dist[i][k] + dist[k][j]){
dist[i][j] = dist[i][k] + dist[k][j];
pred[i][j] = pred[k][j];
aux[k][j]=pred[i][j]+dist[i][j];
//String arrayString = Arrays.deepToString( dist );
//System.out.println( Arrays.deepToString( dist ) );
return pred;
//return dist.toString();//dist;
}
}
}
}
System.out.println("1");
return pred;
}
Chamando ele desta forma na Main e o Grafo tem 20 posições
case 4:
String cidadex, cidadey;
System.out.println("Digite a cidade de Origem");
Scanner leitor = new Scanner(System.in);
cidadex= leitor.nextLine();
System.out.println("Digite a cidade de Destino");
cidadey= leitor.nextLine();
m1 = g.floyd2(cidadex,cidadey); // m1 recebe o retorno do método floyd
for(int l=0;l<17;l++){
for(int c=0;c<17;c++){ // lê os valores da matriz
System.out.print(m1[ l ][ c ]+" ");
}
System.out.println("");
}
O Problema que ele não esta encontrando o menor caminho ele imprimiu outra Matriz contendo estes valores
Quando coloco pra retornar dist Retorna esse conjunto de valores
0 260 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0
260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
170 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 80 0 0 120 0 100 0 0 0 0 0 0 0 0 0
0 0 0 150 0 70 130 0 0 0 0 0 0 0 0 0 0
0 0 0 120 70 0 0 150 200 0 0 0 0 0 0 0 0
0 0 0 0 130 0 0 0 0 70 0 0 0 0 0 0 0
0 0 0 100 0 150 0 0 80 0 0 0 0 0 0 0 0
0 0 0 0 0 200 0 80 0 160 100 0 0 0 0 0 0
0 0 0 0 0 0 70 0 160 0 160 80 0 80 0 0 0
0 0 0 0 0 0 0 0 100 160 0 0 0 80 150 200 0
0 0 0 0 0 0 0 0 0 80 0 0 70 100 0 0 0
0 0 0 0 0 0 0 0 0 0 0 70 0 0 120 0 80
0 0 0 0 0 0 0 0 0 80 80 100 0 0 110 0 0
0 0 0 0 0 0 0 0 0 0 150 0 120 110 0 140 0
0 0 0 0 0 0 0 0 0 0 200 0 0 0 140 0 0
0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0
Quando eu mudo para retornar o pred
Retorna isso
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 0 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
Eu vi que no floyd ele essa matriz mesmo contendo na coloca 1 e na 1 recebe valor 1 na coluna 1 na linha 2 recebe 1 e assim por diante
E na verdade o floyd teria que retornar o menor caminho entre 2 vertices que no caso seriam duas cidades
Se vc entra com uma cidade de origem e dentro ela seria por exemplo o vertice 1 e vc entraria com a segunda cidade que seria por exemplo o vertice 8
Ele teria que mostrar quais vertices que ele percorreu para chegar no vertice 8. Qual o menor caminho