Question 4 Satisfiability of Equality Equations

hint1: What actually is this problem?

  • 这是一个图问题

  • 点:a.b...c....d.z.

  • 边:a= b

这个问题是你构建的图论中什么问题?

能不能找到一组值使得所有的equation都成立

  • 存不存在一组不想等(不同属)的两个点但是却出现在同一个联通分量里

Method Union Find

public boolean equationPossible(String[] equations) {
    int[] laoda = new int[26];
    for (int i =0; i < 26; i++) {
        laoda[i] = i;
    }
    // "a==b"
    for (String equation: equations) {
        if (equation.charAt(1) == '=') {
            int alaoda = find(laoda, equation.charAt(0) - 'a');
            int blaoda = find(laoda, equation.charAt(3) - 'a');
            if (alaoda != blaoda) {
                laoda[alaoda] = blaoda;
            }
        }
    }
    for (String equation: equations) {
        if (equation.charAt(1) == '!') {
            int alaoda = find(laoda, equation.charAt(0) - 'a');
            int blaoda = find(laoda, equation.charAt(3) - 'a');
            if (alaoda != blaoda) {
                return false;
            }
        }   
    }
}
private int find(int[] laoda, int a) {
    return laoda[a] = laoda[a] == a? a: find(laoda, laoda[a]);
}

Last updated