Vous êtes sur la page 1sur 7

/* * To change this template, choose Tools | Templates * and open the template in the editor.

*/ package buscalargura; import import import import java.util.ArrayList; java.util.LinkedList; java.util.Queue; java.util.Stack;

/** * * @author Mourao */ public class Grafo { private Vertice inicial,destino; private ArrayList<Vertice> vestices = new ArrayList(); private Stack<Vertice> fronteira = new Stack<Vertice>(); private ArrayList<Vertice> caminho = new ArrayList(); private ArrayList<Vertice> visitado = new ArrayList(); public void setVestices(ArrayList<Vertice> vestices) { this.vestices = vestices; } public ArrayList<Vertice> getVestices() { return vestices; } public void adicionarVertices(Vertice v){ vestices.add(v); } public void inicializarVertices(){ for(Vertice v : vestices){ v.setNome(null); v.setCor("BRANCO"); v.setPai(null); v.setDistancia(-1); } } public boolean foiVisitado(Vertice no){ return "PRETO".equals(no.getCor()); } public Vertice buscaVertice(Vertice ini, Vertice f){ this.inicial=ini; this.destino=f; Vertice no; inicial.setPai(null);

inicial.setDistancia(0); fronteira.add(this.inicial); while(!fronteira.isEmpty()){ no = fronteira.pop(); caminho.add(no); if(destino.equals(no)){ this.imprimeCaminho(caminho); return no; } for(int i=0;i<no.getVizinhos().size();i++){ if(!foiVisitado(no.getVizinhos().get(i))&& !pesquisaNaFronteira(fronteira,no.getVizinhos().get(i))){ no.getVizinhos().get(i).setCor("CINZA"); no.getVizinhos().get(i).setDistancia(no.getDistancia()+1); fronteira.add(no.getVizinhos().get(i)); } } no.setCor("PRETO"); } return null; } //imprime busca public void imprimeBusca(Vertice v){ System.out.println("Cidade onde est: "+this.inicial.getNome()+ "\nCidade Procurada: "+this.destino.getNome()//+ // "\nPai: " + v.getPai().getNome()+ // "\nDistancia: " + calculaDistancia() +"\n" ); } //imprime o caminho em razo da marcao de preto no vertice visitado public void imprimeCaminho(ArrayList<Vertice> c){ for(int i=0;i<c.size();i++){ System.out.print("("+c.get(i).getNome()+")"); if(i<caminho.size()-1){ System.out.print(">>"); } } System.out.print("\n"); }

//imprime o caminho em razo da marcao de preto no vertice vizitado //Calcula a distancia percorrida em razo do caminho feito public int calculaDistancia(){ int i; int cont = 0; for(i=0;i<caminho.size();i++){ cont+=caminho.get(i).getDistancia(); } return cont; } //Calcula a distancia percorrida em razo do caminho feito public void imprimeVerticesDoGrafo(Grafo g){ for(int i=0; i<g.getVestices().size();i++){ System.out.println("\nNome: "+g.getVestices().get(i).getNome()+ "\nCor: "+g.getVestices().get(i).getCor()+ "\nPai: "+g.getVestices().get(i).getPai()+ "\nDistancia: "+g.getVestices().get(i).getDistancia()); if(g.getVestices().get(i).getVizinhos()!=null){ for(int j=0;j<g.getVestices().get(i).getVizinhos().size();j++){ System.out.print("Vizinhos: "+g.getVestices().get(i).getVizinhos().get(j).getNome() +"\n"); } }else{ System.out.println("Vizinhos: "+g.getVestices().get(i).getVizinhos()+"\n"); } } } private boolean pesquisaNaFronteira(Stack<Vertice> f, Vertice no) { for (int i=0;i<f.size();i++){ if(no.equals(f.get(i))){ System.out.println(""+no.getNome()); return true; } } return false; } }

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package buscalargura; import java.util.ArrayList; /** * * @author Mourao */ public class BuscaLargura { /** * @param args the command line arguments */ public static void main(String[] args) { Grafo g = new Grafo(); Vertice achei; //cria os vertices Vertice A = new Vertice B = new Vertice C = new Vertice D = new Vertice E = new //cria os vertices Vertice(); Vertice(); Vertice(); Vertice(); Vertice();

//adiciona vertices no grafo g.adicionarVertices(A); g.adicionarVertices(B); g.adicionarVertices(C); g.adicionarVertices(D); g.adicionarVertices(E); //adiciona vertices no grafo //inicializar atributos de vertices g.inicializarVertices(); //inicializar atributos de vertices //Preenche os atributos nome e vizinhos dos vertices A.setNome("A"); A.setDistancia(1); B.setNome("B"); B.setDistancia(1); C.setNome("C"); C.setDistancia(1); D.setNome("D"); D.setDistancia(1);

E.setNome("E"); A.adicionarVizinho(B); A.adicionarVizinho(C);// // B.adicionarVizinho(A); // B.adicionarVizinho(C); // B.adicionarVizinho(D);// C.adicionarVizinho(A); C.adicionarVizinho(B); C.adicionarVizinho(D); C.adicionarVizinho(E); D.adicionarVizinho(B); D.adicionarVizinho(C); D.adicionarVizinho(E); E.adicionarVizinho(C); E.adicionarVizinho(D); //Preenche os atributos nome e vizinhos dos vertices //onde a mgica acontece!!! achei = g.buscaVertice(B,A); g.imprimeBusca(achei); // g.imprimeVerticesDoGrafo(g);

B /|\ A | D \|/ \ C---E

} } /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package buscalargura; import java.util.ArrayList; /** * * @author Mourao */ public class Vertice { private String cor;

private int distancia; private Vertice pai; private String nome; public ArrayList<Vertice> vizinhos = new ArrayList<Vertice>(); public void adicionarVizinho(Vertice v){ this.vizinhos.add(v); } public ArrayList<Vertice> getVizinhos() { return vizinhos; } public void setVizinhos(ArrayList<Vertice> vizinhos) { this.vizinhos = vizinhos; } public String getCor() { return cor; } public void setCor(String cor) { this.cor = cor; } public int getDistancia() { return distancia; } public void setDistancia(int distancia) { this.distancia = distancia; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Vertice getPai() { return pai; } public void setPai(Vertice pai) { this.pai = pai; }

Vous aimerez peut-être aussi