假设给你的数组p [1 ...... N]和q [1 ...... N]都未初始化,也就是说,每个位置可能包含一个任意值)和一个变量计数,初始化为0.考虑以下程序集和is_set:
set(i) {
count = count + 1;
q[count] = i;
p[i] = count;
}
is_set(i) {
if (p[i] ≤ 0 or p[i] > count)
return false;
if (q[p[i]] ≠ i)
return false;
return true;
}
显示如果没有为某些i调用set(i),那么无论p [i]包含什么,is_set(i)都将返回false。
我的推理:-is_set(i) 如果p [i]是< = 0,则OR的第一个条件为真,并且首先执行if。如果p [i]> 0,那么我们知道count为零,因此在第一个OR的第二个条件是真的。如果p [i]可能包含它将始终输入此if并返回false。请更正我如果错了