Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package grafo;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.HashMap;
  11. import java.util.Iterator;
  12. import java.util.LinkedList;
  13. import java.util.Map;
  14. import java.util.Queue;
  15. import java.util.Scanner;
  16. import java.util.concurrent.ArrayBlockingQueue;
  17.  
  18. /**
  19. *
  20. * @author Juan
  21. */
  22. class Nodo {
  23.  
  24. String ciudad;
  25. ArrayList<Nodo> conexiones;
  26. boolean visitado;
  27. int posicion;
  28.  
  29. Nodo(String ciudad, ArrayList<Nodo> conexiones) {
  30. this.ciudad = ciudad;
  31. this.conexiones = conexiones;
  32. visitado = false;
  33. posicion = 100001;
  34. }
  35.  
  36. }
  37.  
  38. public class GrafoNodoCola {
  39.  
  40. static HashMap<String, Nodo> agenciaDeViajes = new HashMap<String, Nodo>();
  41. static ArrayList<Nodo> limpieza = new ArrayList<Nodo>();
  42.  
  43. static void limpiar(ArrayList<Nodo> limpieza) {
  44. for (Nodo aux : limpieza) {
  45. aux.visitado = false;
  46. aux.posicion = 100001;
  47. }
  48. limpieza = new ArrayList<Nodo>();
  49. }
  50.  
  51. static int consultarCamino(Nodo ciudadA, Nodo ciudadB) {
  52.  
  53. limpiar(limpieza);
  54.  
  55. LinkedList cola = new LinkedList();
  56. ciudadA.visitado = true;
  57. ciudadA.posicion = 0;
  58. cola.add(ciudadA);
  59.  
  60. limpieza.add(ciudadA);
  61.  
  62. while (!cola.isEmpty()) {
  63.  
  64. Nodo aux = (Nodo) cola.remove();
  65. for (Nodo aux2 : aux.conexiones) {
  66. if (aux2.equals(ciudadB)) {
  67. return aux.posicion + 1;
  68. } else {
  69.  
  70. if (!aux2.visitado) {
  71. aux2.posicion = aux.posicion + 1;
  72. aux2.visitado = true;
  73. cola.add(aux2);
  74. limpieza.add(aux2);
  75. }
  76. }
  77.  
  78. }
  79. }
  80.  
  81. return -1;
  82. }
  83.  
  84. public static void main(String[] args) {
  85.  
  86. Scanner entrada = new Scanner(System.in);
  87.  
  88. int n = Integer.parseInt(entrada.next()); // la cantidad de vuelos
  89. StringBuilder resultado = new StringBuilder(); // salida
  90. ArrayList<Nodo> aux = new ArrayList<Nodo>(); // arraylist auxiliar para primera inicializacion de la ciudad
  91.  
  92. for (int i = 0; i < n; i++) {
  93.  
  94. String ciudadA = entrada.next();
  95. String ciudadB = entrada.next();
  96. // aquí indica que de a va a b
  97.  
  98. if (agenciaDeViajes.containsKey(ciudadA) && agenciaDeViajes.containsKey(ciudadB)) {
  99.  
  100. Nodo auxA = agenciaDeViajes.get(ciudadA);
  101. Nodo auxB = agenciaDeViajes.get(ciudadB);
  102. auxA.conexiones.add(auxB);
  103.  
  104. } else {
  105.  
  106. if (agenciaDeViajes.containsKey(ciudadA)) {
  107.  
  108. Nodo auxB = new Nodo(ciudadB, new ArrayList<Nodo>());
  109. Nodo auxA = agenciaDeViajes.get(ciudadA);
  110. auxA.conexiones.add(auxB);
  111. agenciaDeViajes.put(ciudadB, auxB);
  112.  
  113. } else if (agenciaDeViajes.containsKey(ciudadB)) {
  114.  
  115. Nodo auxB = agenciaDeViajes.get(ciudadB);
  116. Nodo auxA = new Nodo(ciudadA, new ArrayList<Nodo>());
  117. auxA.conexiones.add(auxB);
  118. agenciaDeViajes.put(ciudadA, auxA);
  119.  
  120. } else {
  121.  
  122. Nodo auxA = new Nodo(ciudadA, new ArrayList<Nodo>());
  123. Nodo auxB = new Nodo(ciudadB, new ArrayList<Nodo>());
  124. auxA.conexiones.add(auxB);
  125. agenciaDeViajes.put(ciudadB, auxB);
  126. agenciaDeViajes.put(ciudadA, auxA);
  127. }
  128.  
  129. }
  130.  
  131. }
  132.  
  133. int q = Integer.parseInt(entrada.next()); // consultas
  134.  
  135. for (int i = 0; i < q; i++) {
  136.  
  137. String ciudadA = entrada.next();
  138. String ciudadB = entrada.next();
  139.  
  140. if (agenciaDeViajes.containsKey(ciudadA) && agenciaDeViajes.containsKey(ciudadB)) {
  141.  
  142. int resultadoS = consultarCamino(agenciaDeViajes.get(ciudadA), agenciaDeViajes.get(ciudadB));
  143. if (resultadoS > 0) {
  144. resultado.append("De " + ciudadA + " a " + ciudadB + " se puede llegar en " + resultadoS + " vuelo(s)\n");
  145. continue;
  146. }
  147. }
  148. resultado.append("No hay rutas de " + ciudadA + " a " + ciudadB + "\n");
  149. }
  150.  
  151. System.out.println(resultado.toString());
  152.  
  153. }
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement