首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑电路仿真器中的环路检测

逻辑电路仿真器中的环路检测
EN

Stack Overflow用户
提问于 2016-01-22 16:04:51
回答 1查看 576关注 0票数 2

我正在尝试写一个逻辑门电路模拟器,到目前为止,除了一件事外,一切都在正常工作。我的结构是这样的:

代码语言:javascript
复制
struct node
{
    int number;
    bool has_value;
    bool is_input;
    bool value;
    Gate operation;
    node* input1;
    node* input2;
};

该程序使用递归计算输出值,因此结构中的任何类型的循环都会破坏一切。我的问题是:我如何检测到这样的东西(见图),因为我不能想出任何有用的东西。

电路,电路

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 17:16:53

处理该问题的明显方法是在每个节点中包含一个bool,以指示该节点是否已在当前的模拟步骤中被访问。

您可能希望最初将其设置为false,例如在构造函数中。

然后,模拟步骤将包括遍历一次图以清除标志。只有在当前设置了标志的情况下,才会从给定的节点执行递归。

然后运行模拟步骤。这样做的方式大致相同,但逻辑却相反。在访问每个节点时,检查其visited标志。如果设置好了,就可以立即返回(刚刚在图中检测到一个循环)。否则,您设置标志,处理该节点的输入(等等--您通常的模拟“东西”),然后执行递归调用来对其子节点进行模拟。如果其中任何一个循环返回到这个调用,该调用将立即返回(因为您已经设置了标志),结束了递归调用的“腿”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34950954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档