Saya memiliki masalah di mana saya perlu mengimplementasikan algoritma Dijkstra untuk Masalah Jalur Terpendek Sumber Tunggal dengan Tumpukan Biner. Waktu berjalan harus O(ElogV).

Berikut adalah kode untuk membaca dari pemindai:

try {
        Scanner sc = new Scanner(new File("../SOME_TEXT_FILE.txt"));
        String line = sc.nextLine();
        String[] ne = line.split(" ");

        nodes = Integer.parseInt(ne[0].split("=")[1]);
        edges = Integer.parseInt(ne[1].split("=")[1]);

        constructGraph(sc);

Masalah terjadi ketika metode constructGraph(sc) dipanggil.

Inilah metode itu:

    static void constructGraph(Scanner sc) {
    adjList = new ArrayList[nodes];

    for (int i = 0; i < nodes; i++)
        adjList[i] = new ArrayList<>();

    for (int i = 0; i < nodes && sc.hasNext(); i++) {
        String edge;
        String n = sc.nextLine();
        while (sc.hasNext() && !(edge = sc.nextLine()).isEmpty()) {
            String[] e = edge.trim().split(" ");
            int from, to, weight;

            to = Integer.parseInt(e[0]);
            weight = Integer.parseInt(e[1].trim());
            adjList[Integer.parseInt(n)].add(new Edge(to, weight));
            adjList[to].add(new Edge(Integer.parseInt(n), weight));
        }
    }
}

Kesalahan memberi tahu saya bahwa masalahnya ada di baris yang mengatakan

weight = Integer.parseInt(e[1].trim());

Berikut adalah contoh input yang berasal dari file teks:

n=1000 m=8544
0
    25    244
   108    275
   140    273
   159    313

1
    24    187
    43    182
    65    331
   155    369
   182    222

2
    31    504
    35    403
   176    249
   229     68
0
Kane 18 April 2020, 03:37

1 menjawab

Jawaban Terbaik

Karena ada beberapa spasi di antara dua angka, Anda harus membagi menggunakan regex yang berbeda

String[] e = edge.trim().split("\\s+");

Pemisahan "1 2" menggunakan split(" ") akan menghasilkan array ukuran 3 dengan nilai ["1", "", "2"] dimana elemen tengahnya adalah string kosong yang dibatasi oleh karakter spasi kiri dan kanan. Menggunakan \\s+ Anda mengatakan bahwa Anda ingin membagi urutan yang dipisahkan oleh urutan karakter spasi putih.

1
Flood2d 18 April 2020, 00:52