bool MainWindow::way(QList<structLine *> listStructLineTmp, int i, int j) { if(i==j) return false; else if(m_allWidget->atWhichLine(listStructLineTmp.at(i)->pointStart)==j) return true; else if(m_allWidget->atWhichLine(listStructLineTmp.at(i)->pointEnd)==j) return true; else if(m_allWidget->atWhichLine(listStructLineTmp.at(j)->pointStart)==i) return true; else if(m_allWidget->atWhichLine(listStructLineTmp.at(j)->pointEnd)==i) return true; else return false; }
时间: 2024-04-27 11:23:37 浏览: 11
这段代码是用来判断在一个有向图中,从节点 i 是否能够到达节点 j,其中 listStructLineTmp 是一个存储有向边信息的结构体列表,m_allWidget 是一个存储图上所有节点信息的数据结构。具体实现是通过判断从节点 i 开始的有向边是否能够到达节点 j,或者从节点 j 开始的有向边是否能够到达节点 i,如果能够到达则返回 true,否则返回 false。
相关问题
#include <iostream> #include <cstdlib> int main(){ for(int i = 2, i <= 100, i++){ bool f_t = True; for(int j = 2, j < i,i++){ if (i % j == 0){ f_t = False; break; } if (f_t){ std::cout << i <<std::endl; } } } return 0 }
你的代码还是有一些错误,我会帮你修复一下。修复后的代码如下:
```cpp
#include <iostream>
#include <cstdlib>
int main() {
for(int i = 2; i <= 100; i++) {
bool isPrime = true;
for(int j = 2; j < i; j++) {
if(i % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
std::cout << i << std::endl;
}
}
return 0;
}
```
这段代码会输出从2到100之间的所有质数。修复后的代码中,我将错误的变量名修正为正确的名称,并修正了循环和条件语句的错误。同时,我还添加了一些缺失的分号和括号。
public: std::vector<std::vector<Node*>> paths;,void MainWindow::moveAgvs() { Astar astar; std::vector<std::vector<Node*>> paths(agvs.size()); //根據agv獲取taskid,初始化 int completed_task_index = -1; // 如果任務都完成了,停止定時器 bool all_tasks_completed = true; for (int j = 0; j < tasks.size(); j++) { if (tasks[j].completed != 2) { all_tasks_completed = false; break; } } if (all_tasks_completed) { timer->stop(); // 停止定时器 return; } // 得到agv的路綫 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].getLoad() == true) { // 如果是负载的状态 if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { // 如果到达终点 agvs[i].setLoad(false); // 设置为空载状态 agvs[i].setState(true); std::cout << "agv__id :" << agvs[i].getid() << " ,agv_get_task_id :" << agvs[i].get_task_id() << endl; for (int j = 0; j < tasks.size(); j++) { if (tasks[j].id == agvs[i].get_task_id()) { completed_task_index = j; break; } } if (completed_task_index != -1) { tasks[completed_task_index].completed = 2; } task_to_agv(); // 更新任务分配 update(); // 更新AGV状态 } else { // 否则行驶到终点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path = astar.getPath(start_node, end_node1); path.erase(path.begin()); paths[i] = path; } } else { // 如果是空载的状态 if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { // 如果到达起点 agvs[i].setLoad(true); // 设置为负载状态 } else { // 否则行驶到起点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); std::vector<Node*> path = astar.getPath(start_node, end_node); path.erase(path.begin()); paths[i] = path; } } } // for (int i = 0; i < paths.size(); i++) { // std::cout << "AGV " << i << " path: "; // for (int j = 0; j < paths[i].size(); j++) { // std::cout << "(" << paths[i][j]->x << "," << paths[i][j]->y << ") "; // } // std::cout << std::endl; // },爲什麽在其他函數中引用path永遠為空,怎麽修改
在 `MainWindow::moveAgvs()` 函数中,你创建了一个名为 `paths` 的局部变量,它是一个 `std::vector<std::vector<Node*>>` 类型的二维向量。然后,在循环中,你为 `paths[i]` 赋值一个 `std::vector<Node*>` 类型的向量。这个 `paths` 变量只在 `MainWindow::moveAgvs()` 函数中定义和使用,因此在其他函数中引用 `path` 变量时,它始终为空。
要在其他函数中访问 `paths` 变量,你需要将它定义为 `MainWindow` 类的成员变量。在 `MainWindow` 类的头文件中添加以下代码:
```cpp
private:
std::vector<std::vector<Node*>> paths;
```
然后,在 `MainWindow::moveAgvs()` 函数中,删除 `std::vector<std::vector<Node*>> paths(agvs.size());` 这一行,因为你现在已经有了一个成员变量 `paths`,不需要再创建一个局部变量了。
最后,在其他函数中引用 `paths` 变量时,使用 `this->paths` 表示它是 `MainWindow` 类的成员变量,而不是局部变量。