График из файла ребер - PullRequest
1 голос
/ 09 июля 2020

У меня есть файл, который выглядит примерно так:

0,1
0,3
1,2 
1,3
2,3

На основе этого файла я хотел бы генерировать графики, т.е. функция должна принимать имя файла и возвращать график.

Ожидаемый результат printGraph (определенный ниже) будет выглядеть примерно так:

0 -> 1 -> 3
1 -> 2 -> 3
2 -> 3

Это код, который у меня сейчас есть:

class Graph1

    ArrayList<Integer> [] adjacency_list;

    public void addEdge(Map<Integer, Set<Integer>> adj,int u, int v) {
        if (!adj.containsKey(u)) adj.put(u, new HashSet());
        if (!adj.containsKey(v)) adj.put(v, new HashSet());
        
        adj.get(u).add(v);
        adj.get(v).add(u);
    
    }
class Graph2

public static void read(String filename) {

  AddEdge addEdge = new AddEdge();

  Map<Integer, Set<Integer>> adj = new HashMap<>();
  
  File input = new File("filename");
  try {
   Scanner reader = new Scanner(input); //read in the file

   while (reader.hasNextLine()) {
    String[] nums = reader.nextLine().split(", ");
    addEdge.addEdge(adj, Integer.parseInt(nums[0]), Integer.parseInt(nums[1]));
   }
   printGraph(adj);
   reader.close();
  } catch (IOException e) {
   throw new RuntimeException(e);
  }
 }

static void printGraph(Map<Integer, Set<Integer>> adj) {
  for (int u : adj.keySet()) {
   System.out.println("\nAdjacency list of vertex" + u);
   for (int v : adj.get(u)) {
    System.out.print(" -> " + v);
   }
   System.out.println();
  }
 }

1 Ответ

0 голосов
/ 09 июля 2020

В этом блоке кода

public void addEdge(Map<Integer, Set<Integer>> adj,int u, 
 int v) {
        adjacency_list[u].add(v); 
        adjacency_list[v].add(u);   
 }

Вы не обновляете карту и не размещаете информацию об индексах. В методе printGraph вы перебираете карту, которая будет пустой, поэтому ничего не будет напечатано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...