这是我的作业文本:
考虑由节点和一个方向链接组成的网络。 每个节点将由一个字符表示,并且每个链接都有一个 整数成本值。
因此,当所有节点只有一个链接时,它会起作用,但是当我包含一个节点的多个链接时,它将不起作用。
#include <iostream>
#include <vector>
using namespace std;
class Node {
public:
char nodeChar;
int cost;
Node(char nodeChar) {
this->nodeChar = nodeChar;
}
vector<Node> nextNodes;
void connect(Node &next, int cost) {
next.cost = cost;
this->nextNodes.push_back(next);
}
};
int main() {
Node A('A'), B('B'), C('C'), D('D');
A.connect(C, 3); // A[0] = C
C.connect(B, 4); // C[0] = B
B.connect(A, 2); // B[0] = A
C.connect(D, 5); // C[1] = D
D.connect(B, 6); // D[0] = B
int sum = 0;
Node currentNode = A;
while (sum < 15) {
cout << currentNode.nodeChar;
Node next = currentNode.nextNodes[0];
currentNode = next;
sum += next.cost;
}
cout << endl;
system("pause");
}
答案 0 :(得分:2)
在
A.connect(C, 3);
connect
将next
节点作为参考,但是将其放入nextNodes
时,nextNodes
会创建一个副本。这意味着在A.connect(C, 3);
和C.connect(B, 4);
之后。 A中的C与C不同,并且不了解B。C的此副本在nextNodes
中没有节点,因此
Node next = currentNode.nextNodes[0];
冒险进入不确定的行为。在您的情况下,行为是它不起作用。意味着什么。
解决方案:A必须包含对C的引用,而不是其副本。您将必须熟悉指针或引用包装的用法,因为您无法将引用放入vector
中。