// Allison Obourn // CSE 143 - lecture 12 // This program reads a Graphviz graph file of friendships and allows the user // to find the distance between two people in the graph. import java.io.*; import java.util.*; public class Friends { public static void main(String[] args) throws FileNotFoundException { System.out.println("Welcome to the cse143 friend finder."); Scanner input = new Scanner(new File("friends.dot")); // How to model friendships? // Map: person -> their friends // key: person's name (String) // value: collection of friends (Set) // why set? all values must be unique; order doesn't matter; // contains, add, get should be fast Map> friends = readFile(input); System.out.println(friends); Scanner console = new Scanner(System.in); System.out.print("starting name? "); String name1 = console.next(); System.out.print("target name? "); String name2 = console.next(); showMatches(friends, name1, name2); } // pre : input is open and contains a legal Graphviz file of friendship // connections where each friend is listed as a single token // post: returns a map that contains for each person the set of friends for // that person public static Map> readFile (Scanner input) { Map> friends = new TreeMap>(); while(input.hasNextLine()) { String line = input.nextLine(); if(line.contains("--")) { Scanner lineData = new Scanner(line); String name1 = lineData.next(); lineData.next(); String name2 = lineData.next(); addTo(friends, name1, name2); addTo(friends, name2, name1); } } return friends; } // post: records a friendship for name1. If name1 is not in the map, a new // set is added to the map public static void addTo(Map> friends, String name1, String name2) { if(!friends.containsKey(name1)) { friends.put(name1, new TreeSet()); } friends.get(name1).add(name2); } // WARNING: this method is incomplete! We will finish it on Wednesday. // post: computes the distance between two people, printing the various // lists of friends with their distance from name1 public static void showMatches(Map> friends, String name1, String name2) { System.out.println(); System.out.println("Starting with " + name1); distance = 1; Set currentGroup = new TreeSet(); while(/* we haven't found name2 */) { distance++; } } }