Advertisement
Riposati

Untitled

Jun 22nd, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.65 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.HashSet;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. import java.util.Queue;
  6. import java.util.Scanner;
  7. import java.util.Set;
  8.  
  9. class Aresta {
  10.  
  11.     private Vertice verticeAdj;
  12.  
  13.     protected Vertice getVerticeAdj() {
  14.         return verticeAdj;
  15.     }
  16.  
  17.     protected void setVerticeAdj(Vertice verticeAdj) {
  18.         this.verticeAdj = verticeAdj;
  19.     }
  20. }
  21.  
  22. class Vertice {
  23.  
  24.     private String rotulo;
  25.     private boolean visitado;
  26.     private List<Aresta> listaArestas;
  27.  
  28.     public Vertice() {
  29.         this.visitado = false;
  30.         this.listaArestas = new ArrayList<Aresta>(10);
  31.     }
  32.  
  33.     public boolean isVisitado() {
  34.  
  35.         return this.visitado;
  36.     }
  37.  
  38.     public String getRotulo() {
  39.         return rotulo;
  40.     }
  41.  
  42.     public void setRotulo(String rotulo) {
  43.         this.rotulo = rotulo;
  44.     }
  45.  
  46.     public List<Aresta> getListaArestas() {
  47.         return listaArestas;
  48.     }
  49.  
  50.     public void addAresta(Vertice rotulo) {
  51.  
  52.         Aresta a = new Aresta();
  53.         a.setVerticeAdj(rotulo);
  54.         ;
  55.         this.listaArestas.add(a); // o vértice recebe esse cara
  56.     }
  57.  
  58.     public void setVisitado() {
  59.         this.visitado = true;
  60.  
  61.     }
  62.  
  63.     public void setNaoVisitado() {
  64.         this.visitado = false;
  65.  
  66.     }
  67.  
  68.     @Override
  69.     public String toString() {
  70.         return this.getRotulo() + ",";
  71.     }
  72. }
  73.  
  74. class Grafo {
  75.  
  76.     private List<Vertice> listaVertices;
  77.     static List<String> ordem = new ArrayList<>(10);
  78.     private int cont;
  79.  
  80.     public Grafo() {
  81.         this.listaVertices = new ArrayList<Vertice>(10);
  82.     }
  83.  
  84.     public List<Vertice> getListaVertices() {
  85.         return listaVertices;
  86.     }
  87.  
  88.     public void addVertice(String rotuloVertice) {
  89.  
  90.         Vertice v = new Vertice();
  91.         v.setRotulo(rotuloVertice);
  92.         this.listaVertices.add(v);
  93.     }
  94.  
  95.     public void addAresta(Grafo g, String verticeRecebeAresta, String verticeParteAresta) {
  96.  
  97.         boolean flag = false;
  98.         boolean flag2 = false;
  99.  
  100.         int x = 0;
  101.         for (int i = 0; i < g.getListaVertices().size(); i++) {
  102.  
  103.             if (verticeParteAresta.equalsIgnoreCase(g.getListaVertices().get(i).getRotulo())) {
  104.                 x = i;
  105.                 flag = true;
  106.                 break;
  107.             }
  108.         }
  109.  
  110.         int t = 0;
  111.         for (int i = 0; i < g.getListaVertices().size(); i++) {
  112.  
  113.             if (verticeRecebeAresta.equalsIgnoreCase(g.getListaVertices().get(i).getRotulo())) {
  114.                 t = i;
  115.                 flag2 = true;
  116.                 break;
  117.             }
  118.         }
  119.  
  120.         if (flag && flag2) {
  121.  
  122.             g.getListaVertices().get(x).addAresta(g.getListaVertices().get(t));
  123.             g.getListaVertices().get(t).addAresta(g.getListaVertices().get(x));
  124.  
  125. //           System.out.println("Vértice que recebeu = " + verticeRecebeAresta
  126. //           + " "
  127. //           + g.getListaVertices().get(t).getListaArestas());
  128. //           System.out.println(
  129. //           "Vértice que partiu = " + verticeParteAresta + " " +
  130. //           g.getListaVertices().get(x).getListaArestas());
  131.         }
  132.     }
  133.  
  134.     void buscaLargura() {
  135.  
  136.         cont = 0;
  137.         int aux =0;
  138.         Queue<Vertice> fila = new LinkedList<>();
  139.  
  140.         for(int i=0;i<this.getListaVertices().size();i++){
  141.            
  142.             if(this.getListaVertices().get(i).getRotulo().equalsIgnoreCase("entrada")){
  143.                 aux = i;
  144.                 break;
  145.             }
  146.         }
  147.        
  148.         fila.add(this.getListaVertices().get(aux));
  149.         this.getListaVertices().get(aux).setVisitado();
  150.  
  151.         int i = 0;
  152.         while (!fila.isEmpty()) {
  153.  
  154.             Vertice vertice = fila.poll();
  155.            
  156.             System.out.println("Busca largura 1 Vertice = " + vertice.getRotulo());
  157.  
  158.             if (!vertice.getRotulo().equals("*")) {
  159.  
  160.                 cont++;
  161.             }
  162.            
  163.             if (vertice.getRotulo().equals("Saida")) {
  164.  
  165.                 break;
  166.             }
  167.  
  168.             i = 0;
  169.  
  170.             while (vertice.getListaArestas() != null && i < vertice.getListaArestas().size()) {
  171.  
  172.                 Aresta a = vertice.getListaArestas().get(i);
  173.  
  174.                 if (!a.getVerticeAdj().isVisitado()) {
  175.                    
  176.                     System.out.println("Busca largura 1 Vertice adjacente = " + a.getVerticeAdj().getRotulo());
  177.                    
  178.                     a.getVerticeAdj().setVisitado();
  179.                     fila.add(a.getVerticeAdj());
  180.                    
  181.                     if (a.getVerticeAdj().getRotulo().equals("*")) {
  182.                        
  183.                         buscaLargura2();
  184.                         return;
  185.                     }
  186.                 }
  187.  
  188.                 i++;
  189.             }
  190.  
  191.             i = 0;
  192.         }
  193.     }
  194.    
  195.     void buscaLargura2() {
  196.  
  197.         cont = 0;
  198.         int aux =0;
  199.        
  200.        
  201.         for(int i=0;i<this.getListaVertices().size();i++){
  202.            
  203.             this.getListaVertices().get(i).setNaoVisitado();
  204.         }
  205.        
  206.         Queue<Vertice> fila = new LinkedList<>();
  207.  
  208.         for(int i=0;i<this.getListaVertices().size();i++){
  209.            
  210.             if(this.getListaVertices().get(i).getRotulo().equalsIgnoreCase("*")){
  211.                 aux = i;
  212.             }
  213.         }
  214.        
  215.         fila.add(this.getListaVertices().get(aux));
  216.         this.getListaVertices().get(aux).setVisitado();
  217.  
  218.         int i = 0;
  219.         while (!fila.isEmpty()) {
  220.  
  221.             Vertice vertice = fila.poll();
  222.            
  223.             System.out.println("Vertice = " + vertice.getRotulo());
  224.  
  225.             if (!vertice.getRotulo().equals("Saida")) {
  226.                 cont++;
  227.             }
  228.  
  229.             i = 0;
  230.  
  231.             while (vertice.getListaArestas() != null && i < vertice.getListaArestas().size()) {
  232.  
  233.                 Aresta a = vertice.getListaArestas().get(i);
  234.  
  235.                 if (!a.getVerticeAdj().isVisitado()) {
  236.                    
  237.                     System.out.println("Vertice adjacente = " + a.getVerticeAdj().getRotulo());
  238.                    
  239.                     a.getVerticeAdj().setVisitado();
  240.                     fila.add(a.getVerticeAdj());
  241.                    
  242.                     if (a.getVerticeAdj().getRotulo().equals("Saida")) {
  243.                         return;
  244.                        
  245.                     }
  246.                 }
  247.  
  248.                 i++;
  249.             }
  250.  
  251.             i = 0;
  252.         }
  253.     }
  254.  
  255.  
  256.     void mostraQtdVerticesCaminhoDoRato() {
  257.  
  258.         System.out.println(this.cont);
  259.     }
  260.  
  261.     @Override
  262.     public String toString() {
  263.  
  264.         StringBuilder s = new StringBuilder();
  265.  
  266.         for (int i = 0; i < listaVertices.size(); i++) {
  267.  
  268.             s.append(listaVertices.get(i).getRotulo() + " Já visitado => " + listaVertices.get(i).isVisitado() + "\n");
  269.         }
  270.         return "Grafo = Vértices => \n" + s.toString();
  271.     }
  272.  
  273. }
  274.  
  275. public class Main {
  276.  
  277.     public static void main(String[] args) {
  278.  
  279.         Scanner r = new Scanner(System.in);
  280.  
  281.         int qtdVertices, v = 0, qtdArestas, t;
  282.  
  283.         List<String> primeiro = new ArrayList<String>(26);
  284.         List<String> segundo = new ArrayList<String>(26);
  285.  
  286.         Set<String> conjuntoVertices = new HashSet<>();
  287.  
  288.         qtdVertices = r.nextInt();
  289.         qtdArestas = r.nextInt();
  290.  
  291.         Grafo grafo = new Grafo();
  292.  
  293.         t = 0;
  294.  
  295.         while (t < qtdArestas) {
  296.  
  297.             String verticeQueRecebeAresta = r.next();
  298.             String verticeMandaAresta = r.next();
  299.            
  300.             primeiro.add(verticeQueRecebeAresta);
  301.             segundo.add(verticeMandaAresta);
  302.            
  303.             conjuntoVertices.add(verticeMandaAresta);
  304.             conjuntoVertices.add(verticeQueRecebeAresta);
  305.            
  306.             t++;
  307.         }
  308.        
  309.         for(String vertice : conjuntoVertices){
  310.            
  311.             //System.out.println(vertice);
  312.             grafo.addVertice(vertice);
  313.         }
  314.  
  315.             //grafo.addAresta(grafo, verticeQueRecebeAresta, verticeMandaAresta);
  316. //      }
  317.        
  318.         t = 0;
  319.         while (t < qtdArestas) {
  320.            
  321.             grafo.addAresta(grafo, primeiro.get(t),segundo.get(t));
  322.             t++;
  323.         }
  324.         grafo.buscaLargura();
  325.  
  326.         grafo.mostraQtdVerticesCaminhoDoRato();
  327.  
  328.          //System.out.println(grafo);
  329.  
  330.         r.close();
  331.     }
  332.  
  333. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement