qt如何实现约瑟夫问题可视化?

img

img


这个怎么实现呢?真的真的不会做,求问各位。那些按钮具体都是什么按钮呢?


约瑟夫问题可视化的实现步骤:
1. 设计UI,包含输入人数lineEdit,起始编号spinBox,间隔编号spinBox,开始按钮,重置按钮等。
2. 点击开始按钮后,根据输入的参数生成指定人数的节点,节点之间有顺序连接。
3. 按照间隔编号一次消除节点,同时高亮显示被消除的节点。
4. 重复步骤3,直到最后一个节点被消除,弹出结果提示框,显示最后存活的节点编号。
5. 点击重置按钮清空UI输入框并重置视图。
关键代码:
cpp
// 生成节点
for (int i = 1; i <= n; ++i) {
    Node *node = new Node(i);
    node->setFlag(false);
    scene->addItem(node);
    nodeList.append(node);
}

// 连接节点
for (int i = 0; i < n - 1; ++i) {
    nodeList[i]->setPos(i * interval, 0);
    nodeList[i]->addToGroup(nodeList[i + 1]);
}

// 消除节点
QList<Node*> removedNodes;
int count = 1; 
while (nodeList.size() > 1) {
    Node *node = nodeList.at(startIndex);
    node->setFlag(true);
    removedNodes.append(node);
    startIndex = (startIndex + interval) % nodeList.size();
    count++;
}

// 删除被消除的节点
for (auto node : removedNodes) {
    scene->removeItem(node);
} 
按钮点击信号槽连接如下:
cpp
// 开始按钮
connect(startButton, &QPushButton::clicked, [=]() {
    // ... 执行消除节点逻辑
});

// 重置按钮 
connect(resetButton, &QPushButton::clicked, [=]() {
    lineEdit->clear();
    spinBox1->setValue(1);
    spinBox2->setValue(3);
    scene->clear();
    nodeList.clear();
});
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^