//mlbillington@fcps.edu, May 2012, June 2014
//uses AdjMat
import java.util.*;
import java.io.*;
public class WarshallDriver
{
   public static void main(String[] args)throws FileNotFoundException
   {
      Scanner kb = new Scanner(System.in);
      System.out.print("Warshall's Algorithm! Enter file of names: "); 
   											                    //cities
      String fileNames = kb.next()+".txt";
      Scanner sc = new Scanner(new File(fileNames));
      int size = sc.nextInt();
      AdjMat g = new AdjMat(size);
      g.readNames(fileNames);
      System.out.print("Enter file of the matrix: "); //citymatrix
      String fileGrid = kb.next()+".txt";
      g.readGrid(fileGrid);
      System.out.println("Adjacency Matrix");
      System.out.println(g.toString());
      System.out.println("Number of Edges: " + g.edgeCount());
      System.out.println();
   
      g.allPairsReachability();    //runs Warshall's algorithm
      g.displayVertices();
      System.out.println("Reachability Matrix");
      System.out.println(g.toString());
      System.out.println("Number of Edges: " + g.edgeCount());
   
      while(true)
      {
         System.out.print("\nIs it reachable?  Enter name of start city (-1 to exit): ");
         String from = kb.next().trim();
         if(from.equals("-1"))
            break;
         System.out.print("                Enter name of end city: "); 
         String to = kb.next().trim();  
         System.out.println( g.isEdge(from, to) );
      }
      
      //Extension
      System.out.println("\n================== EXTENSION =================="); 
      System.out.println("List of every city's reachable cities: ");
      for(String city : g.getVertices().keySet() )
         System.out.println(city + "--> " + g.getReachables(city) );
         
      while(true)
      {
         System.out.print("\nList the reachable cities from: ");
         String from = kb.next();
         if(from.equals("-1"))
            break;
         System.out.println(g.getReachables(from));
      }
   }
}

/******************************************
 Warshall's Algorithm! Enter file of names: cities
 Enter file of the matrix: citymatrix
 Adjacency Matrix
  0  0  0  0  0  0  0  1 
  0  0  0  1  0  0  0  0 
  0  0  0  0  0  1  0  1 
  0  0  0  0  0  1  0  1 
  1  0  0  0  0  0  0  0 
  0  1  0  1  0  0  0  0 
  0  0  0  0  0  1  1  0 
  1  0  0  0  1  0  0  0 
 
 Number of Edges: 13
 
 0-Pendleton
 1-Pensacola
 2-Peoria
 3-Phoenix
 4-Pierre
 5-Pittsburgh
 6-Princeton
 7-Pueblo
 
 Reachability Matrix
  1  0  0  0  1  0  0  1 
  1  1  0  1  1  1  0  1 
  1  1  0  1  1  1  0  1 
  1  1  0  1  1  1  0  1 
  1  0  0  0  1  0  0  1 
  1  1  0  1  1  1  0  1 
  1  1  0  1  1  1  1  1 
  1  0  0  0  1  0  0  1 
 
 Number of Edges: 40
 
 Is it reachable?  Enter name of start city (-1 to exit): Pittsburgh
                 Enter name of end city: Peoria
 false
 
 Is it reachable?  Enter name of start city (-1 to exit): Pittsburgh
                 Enter name of end city: Phoenix
 true
 
 Is it reachable?  Enter name of start city (-1 to exit): -1
 
 **************************************************/