Dúvida em Algoritmo de Menor Caminho

4 respostas
H

Boa noite pessoal...
Estou tentando implementar um algoritmo de menor caminho (Algoritmo de Dijkstra) mas estou encontrando um erro... já revirei várias páginas e fóruns mas nada... o lugar onde está dando o erro, está com uma <---... e é o famoso java.lang.NullPointerException.
Alguém tem alguma luz?

public class Algoritmo extends Matriz {

	public float dv[]; //vetor com os pesos
	public int vet[]; // vetor com o caminho
	public int x; // contador
	public int y; // contador
	public int cont = 1; // contador conjunto U
	public int loc; // localizador conjunto U
	//int lista[]; // recebe menor caminho para impressao
	public int vx; // vertice atual
	public int du; // peso do vertice anterior
	public int uTem; // testa se é adjacente
	public int u[]; // U Posiçao
	public int z;// u Peso
	public float menor_d; // menor distancia
	
	public float[] getDv() {
		return dv;
	}

	public void setDv(float[] dv) {
		this.dv = dv;
	}

	public int[] getVet() {
		return vet;
	}

	public void setVet(int[] vet) {
		this.vet = vet;
	}

	
	public Algoritmo(){
		for(x = 0; x<getQtdv(); x++){
			vet[x] = -1;
			dv[x] = Integer.MAX_VALUE;
		
	} // fecha for
		
	dv[getVo()] = 0;
	u[0] = getVo();
	z = getVo();
	
}// fecha construtor
	
	{
	do{
		for(x=0; x<getQtdv();x++){
			
			if((vx!=z) && (matriz[z][x]!=0) && (vx!=u[x])&&(dv[x]>du+(matriz[z][vx]))){ //precisa incrementar o calculo Dvi, pois esse dv[x] segnifica D(vi)
				dv[x] = du + matriz[z][vx];
				vet[x] = z;
			}
			
		}// fecha for 1
		
        menor_d = Integer.MAX_VALUE;
        
		for(x=0; x<getQtdv();x++){
			
			if((testaU()!=0) && (dv[x]<menor_d)){
				menor_d = dv[x];
				z = vx; 
			}
		uTem = 0;	
		}// fecha for 2
		
		u[1] = 1; <---- ERRO AQUI
		cont = cont+1; 
		
					 
	}while(z == getVd());}
		
	
	public int testaU() {
		for(x=0;x<getQtdv();x++){
			if(u[x]!=0){
				uTem = u[x];}
	}
		return uTem; 
	}

	public int[] getU() {
		return u;
	}

}// fim da classe

4 Respostas

Alkamavo

veja aki

dv[getVo()] = 0;  
     u[0] = getVo();  
     z = getVo();  
       
 }// fecha construtor

so passas elemento neste vector na posiçao zero …
e aqui…

u[1] = 1; <---- ERRO AQUI  
         cont = cont+1;                                     
  }

tas a invocar a posiçao numero 1 do vector que nao meteste la nada…pk este teu vector so tem algo na posiçao zero…

Bom trabalho…cara

H

Olá meu caro amigo Alkamavo…
Acabei de ver que nos testes pra descobrir o motivo desse erro, esqueci de voltar o algoritmo pra situação original…
Na verdade, a linha é:

u[cont] = 1; <---- ERRO AQUI
T

Amigo me mata uma curiosidade, onde vc iniciou o vetor u? Não encontrei no código.

B

Me pergunto que relação de herança Algoritmo tem com Matriz. Você não quis dizer que algoritmo usa uma matriz ao invés de algoritmo é uma matriz?

Criado 31 de maio de 2008
Ultima resposta 31 de mai. de 2008
Respostas 4
Participantes 4