Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package grafo;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.Map;
- import java.util.Queue;
- import java.util.Scanner;
- import java.util.concurrent.ArrayBlockingQueue;
- /**
- *
- * @author Juan
- */
- class Nodo {
- String ciudad;
- ArrayList<Nodo> conexiones;
- boolean visitado;
- int posicion;
- Nodo(String ciudad, ArrayList<Nodo> conexiones) {
- this.ciudad = ciudad;
- this.conexiones = conexiones;
- visitado = false;
- posicion = 100001;
- }
- }
- public class GrafoNodoCola {
- static HashMap<String, Nodo> agenciaDeViajes = new HashMap<String, Nodo>();
- static ArrayList<Nodo> limpieza = new ArrayList<Nodo>();
- static void limpiar(ArrayList<Nodo> limpieza) {
- for (Nodo aux : limpieza) {
- aux.visitado = false;
- aux.posicion = 100001;
- }
- limpieza = new ArrayList<Nodo>();
- }
- static int consultarCamino(Nodo ciudadA, Nodo ciudadB) {
- limpiar(limpieza);
- LinkedList cola = new LinkedList();
- ciudadA.visitado = true;
- ciudadA.posicion = 0;
- cola.add(ciudadA);
- limpieza.add(ciudadA);
- while (!cola.isEmpty()) {
- Nodo aux = (Nodo) cola.remove();
- for (Nodo aux2 : aux.conexiones) {
- if (aux2.equals(ciudadB)) {
- return aux.posicion + 1;
- } else {
- if (!aux2.visitado) {
- aux2.posicion = aux.posicion + 1;
- aux2.visitado = true;
- cola.add(aux2);
- limpieza.add(aux2);
- }
- }
- }
- }
- return -1;
- }
- public static void main(String[] args) {
- Scanner entrada = new Scanner(System.in);
- int n = Integer.parseInt(entrada.next()); // la cantidad de vuelos
- StringBuilder resultado = new StringBuilder(); // salida
- ArrayList<Nodo> aux = new ArrayList<Nodo>(); // arraylist auxiliar para primera inicializacion de la ciudad
- for (int i = 0; i < n; i++) {
- String ciudadA = entrada.next();
- String ciudadB = entrada.next();
- // aquí indica que de a va a b
- if (agenciaDeViajes.containsKey(ciudadA) && agenciaDeViajes.containsKey(ciudadB)) {
- Nodo auxA = agenciaDeViajes.get(ciudadA);
- Nodo auxB = agenciaDeViajes.get(ciudadB);
- auxA.conexiones.add(auxB);
- } else {
- if (agenciaDeViajes.containsKey(ciudadA)) {
- Nodo auxB = new Nodo(ciudadB, new ArrayList<Nodo>());
- Nodo auxA = agenciaDeViajes.get(ciudadA);
- auxA.conexiones.add(auxB);
- agenciaDeViajes.put(ciudadB, auxB);
- } else if (agenciaDeViajes.containsKey(ciudadB)) {
- Nodo auxB = agenciaDeViajes.get(ciudadB);
- Nodo auxA = new Nodo(ciudadA, new ArrayList<Nodo>());
- auxA.conexiones.add(auxB);
- agenciaDeViajes.put(ciudadA, auxA);
- } else {
- Nodo auxA = new Nodo(ciudadA, new ArrayList<Nodo>());
- Nodo auxB = new Nodo(ciudadB, new ArrayList<Nodo>());
- auxA.conexiones.add(auxB);
- agenciaDeViajes.put(ciudadB, auxB);
- agenciaDeViajes.put(ciudadA, auxA);
- }
- }
- }
- int q = Integer.parseInt(entrada.next()); // consultas
- for (int i = 0; i < q; i++) {
- String ciudadA = entrada.next();
- String ciudadB = entrada.next();
- if (agenciaDeViajes.containsKey(ciudadA) && agenciaDeViajes.containsKey(ciudadB)) {
- int resultadoS = consultarCamino(agenciaDeViajes.get(ciudadA), agenciaDeViajes.get(ciudadB));
- if (resultadoS > 0) {
- resultado.append("De " + ciudadA + " a " + ciudadB + " se puede llegar en " + resultadoS + " vuelo(s)\n");
- continue;
- }
- }
- resultado.append("No hay rutas de " + ciudadA + " a " + ciudadB + "\n");
- }
- System.out.println(resultado.toString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement