在这段代码中,有几个问题需要注意:

  1. 文件路径问题:代码中使用的文件路径是绝对路径,这可能会导致在其他计算机上无法找到文件。建议使用相对路径或将文件放在可访问的位置。

  2. 异常处理问题:在main方法中使用了throws IOException声明,但没有实际处理IOException。建议使用try-catch块来处理可能的异常。

  3. 输入问题:代码中使用了StdIn类来读取输入,但实际上并没有使用到该类。建议删除相关的导入和代码。

  4. 循环中的输出问题:在union方法的循环中,通过System.out.println打印了一些调试信息,这可能会干扰输出结果。建议将这些打印语句删除或注释掉。

  5. 循环条件问题:在union方法的循环中,通过id[i] == id[number1]来判断是否需要更新id[i],但实际上这可能会导致错误的结果。应该使用find方法来判断是否需要更新。

  6. 类命名问题:UnionFind类的命名不够清晰,可以考虑更具体的命名,例如QuickFindQuickUnion

综上所述,修正后的代码如下所示:

package org.example.find;

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class QuickFind {
    private int[] id;
    private int count;
    
    public QuickFind(int N) {
        count = N;
        id = new int[N];
        for (int i = 0; i < N; i++)
            id[i] = i;
    }
    
    public int count() {
        return count;
    }
    
    public boolean connected(int number1, int number2) {
        return find(number1) == find(number2);
    }
    
    public int find(int number) {
        return id[number];
    }
    
    public void union(int number1, int number2) {
        if (connected(number1, number2))
            return;
        
        int root1 = find(number1);
        int root2 = find(number2);
        
        for (int i = 0; i < id.length; i++) {
            if (id[i] == root1) {
                id[i] = root2;
            }
        }
        
        count--;
    }
    
    public static void main(String[] args) {
        String filename = "tinyUF.txt"; // 相对路径或绝对路径
        try {
            Scanner sc = new Scanner(new FileReader(filename));
            int N = sc.nextInt();
            QuickFind quickFind = new QuickFind(N);
            while (sc.hasNext()) {
                int number1 = sc.nextInt();
                int number2 = sc.nextInt();
                if (quickFind.connected(number1, number2))
                    continue;
                quickFind.union(number1, number2);
                System.out.println(number1 + " " + number2);
            }
            System.out.println(quickFind.count() + " components");
            sc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
``
package orgexamplefind;import eduprincetoncsalgs4StdIn;import javaioFileReader;import javaioIOException;import javautilScanner;public class UnionFind private int id; private int count; publi

原文地址: https://www.cveoy.top/t/topic/hUuA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录