下面是一个简单的 FSANode
类的实现,支持多个前驱节点和多个后继节点。我们将使用 std::vector
来存储这些节点。
#include <iostream>
#include <vector>
#include <string>
class FSANode {
public:
// 节点的唯一标识符
std::string id;
// 前驱节点列表
std::vector<FSANode*> predecessors;
// 后继节点列表
std::vector<FSANode*> successors;
// 构造函数
FSANode(const std::string& nodeId) : id(nodeId) {}
// 添加前驱节点
void addPredecessor(FSANode* predecessor) {
if (predecessor != nullptr) {
predecessors.push_back(predecessor);
}
}
// 添加后继节点
void addSuccessor(FSANode* successor) {
if (successor != nullptr) {
successors.push_back(successor);
}
}
// 显示当前节点的信息,包括前驱和后继
void display() const {
std::cout << "Node ID: " << id << "\n";
std::cout << "Predecessors: ";
for (const auto& pred : predecessors) {
std::cout << pred->id << " ";
}
std::cout << "\nSuccessors: ";
for (const auto& succ : successors) {
std::cout << succ->id << " ";
}
std::cout << "\n";
}
};
int main() {
// 创建一些节点
FSANode nodeA("A");
FSANode nodeB("B");
FSANode nodeC("C");
// 设置关系:A -> B, A -> C, B -> C
nodeA.addSuccessor(&nodeB);
nodeA.addSuccessor(&nodeC);
nodeB.addPredecessor(&nodeA);
nodeC.addPredecessor(&nodeA);
nodeC.addPredecessor(&nodeB);
// 显示每个节点的信息
nodeA.display();
nodeB.display();
nodeC.display();
return 0;
}
代码说明:
类定义:
FSANode
类有三个主要属性:id
(标识符),predecessors
(前驱节点列表)和successors
(后继节点列表)。
构造函数:
- 构造函数接受一个字符串参数,用于初始化节点的 ID。
添加前驱/后继方法:
- 提供了
addPredecessor
和addSuccessor
方法,用于向相应列表中添加前驱和后继节点。
- 提供了
显示信息的方法:
- 使用
display()
方法来输出该节点及其关联的前驱和后继信息。
- 使用
测试代码:
- 在主函数中创建了一些示例节点,并设置了它们之间的关系,最后调用
display()
方法显示每个节点的信息。
- 在主函数中创建了一些示例节点,并设置了它们之间的关系,最后调用
这个实现允许一个 FSA 节点拥有多个前驱和后继,从而能够在有限状态自动机中灵活地连接不同的状态。
内容由零声教学AI助手提供,问题来源于学员提问