/*
* 算法思想:并查集
* 1. 将相等的元素添加到一个并查集中;
* 2. 将不等的式子,看两端元素是否在前述并查集中,如果在则返回false。
*/
int find(int *arr, int i){
return i == arr[i] ? i : (arr[i] = find(arr, arr[i]));
}
void un(int *arr, int i, int j){
int x = find(arr, i);
int y = find(arr, j);
arr[y] = x;
}
bool equationsPossible(char ** eq, int eqsize){
int i, j, arr[128];
for(i=0; i<128; i++){
arr[i] = i;
}
/* 将相等的元素添加到一个集合中, */
for(i=0; i<eqsize; i++){
if(eq[i][1] == '=') {
un(arr, (int)eq[i][0], (int)eq[i][3]);
}
}
/* 查找不等的元素,是否在相等的集合中 */
for(i=0; i<eqsize; i++){
if(eq[i][1] == '!' && find(arr, (int)eq[i][0]) == find(arr, (int)eq[i][3])) {
return false;
}
}
return true;
}
leetcode-990. 等式方程的可满足性-C语言
最新推荐文章于 2024-01-03 20:29:32 发布