运算符如何计算其参数。我有一个代码来检查一个图是否是循环的。在这段代码中,if语句中有一个and条件。我认为,就我所能理解的,它在第一次遇到错误表达式时终止,而根本不计算第二个表达式。
这是密码
bool Graph::isCyclicUtil(int v, bool *visited, bool *recStack){
if (visited[v] == false){
visited[v] = true;
recStack[v] = true;
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); i++){
-------->**This and cond**if (!visited[*i] && isCyclicUtil(*i, visited, recStack))
return true;
else if (recStack[*i])
return true;
}
}
recStack[v] = false;
return false;
}
void Graph::printRecStack(bool *recStack){
cout << "\n \n";
for (int i = 0; i < V; i++){
if (recStack[i])
cout <<i<< "\n";
}
return;
}
bool Graph::isCyclic(){
bool *visited = new bool[V];
bool *recStack = new bool[V];
for (int i = 0; i<V; i++){
visited[i] = false;
recStack[i] = false;
}
if (isCyclicUtil(0,visited, recStack)){
printRecStack(recStack);
return true;
}
return false;
}
请注意isCyclicUtil函数中if语句中的和条件。
如果您将一个简单的图作为一个测试用例,如下图所示:
0->1
1->2
2->0
2->3
3->3
然后打电话
isCyclicUtil(循环实用程序)
对于
0
,第一个
3.
中的值
记录堆栈
结果证明是真的。如果第二个表达式也在
if语句
。因为呼叫
节点2
将达到其
子级0
。但由于循环从0开始,0已被访问,因此
记录堆栈[0
]应初始化为false。但这并没有发生,所有这些都是事实。仿佛
和
条件一遇到就终止
已访问[0]
说真的,甚至不打电话
isCyclicUtil(0,已访问,recStack
)再次。