检测逻辑电路模拟器中的环路
Detecting a loop in logic circuit simulator
我正在尝试编写一个逻辑门电路模拟器,到目前为止一切都在工作,除了一件事。我的结构如下所示:
struct node
{
int number;
bool has_value;
bool is_input;
bool value;
Gate operation;
node* input1;
node* input2;
};
该程序使用递归计算输出值,因此结构内的任何类型的循环都会弄乱一切。我的问题是:我如何检测这样的东西(见图),因为我想不出任何有效的方法。
电路
处理该问题的明显方法是在每个节点中包含bool
,表示该节点是否已在当前模拟步骤中被访问过。
您希望最初将其设置为false
,例如在构造函数中。
然后,模拟步骤将包括遍历图形一次以清除标志。当且仅当当前设置了标志时,您才会从给定节点执行递归。
然后运行模拟步骤。这将以大致相同的方式进行,但逻辑颠倒过来。访问每个节点时,请检查其visited
标志。如果已设置,您可以立即返回(并且您刚刚在图表中检测到一个周期)。否则,您可以设置标志,处理该节点的输入(等等 - 您通常的模拟"东西"),然后执行递归调用以在其子节点上进行模拟。如果它们中的任何一个循环回此调用,该调用将立即返回(因为您已经设置了标志),结束递归调用的"腿"。
相关文章:
- 如何在c++中实现处理器调度模拟器
- 普通环路未使用gcc 4.8.5自动矢量化
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 询问在设计我的手臂模拟器功能表示格式1
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- C++ - 标准输入环路
- 如何在arduino或Raspberrypi上制作600MHz环路?
- 为什么在环路条件中使用'<='而不是'<'会产生分段错误 [SIGSEGV]?
- 汽车仪表模拟器
- 使用 std::mutex 保护环路
- 键盘模拟器
- 用GTK创建逻辑门模拟器,如何制作放置区域
- 在信号槽机制与传统环路之间做出决定
- 在环路中使用 UDP 套接字时连接被拒绝
- 如何在 ns2 模拟器中修改节点的行为?
- 临时参考 C++11 上的环路的远程基座
- opengl 飞行模拟器应用程序中的文本呈现问题
- OpenMP 环路阵列访问中的错误共享
- 环路内开关的性能
- 检测逻辑电路模拟器中的环路