我创建了一个包含链接列表矢量的类。每个链接列表代表我的图表中的顶点。连接到我的链表的节点被认为是这些顶点之间的边。我试图为我的图形创建一个DFS函数,但是在设置顶点的颜色方面遇到了麻烦。我意识到我的代码存在很多问题,但我特别试图解决这个问题。我的DFSit()函数以无限循环结束,因为我的列表的颜色属性实际上并未设置为"灰色"。知道为什么会这样吗?
void Graph::DFS()
{
int i = 0;
while (i != myvector.size())
{
DFSit(myvector[i], myvector[i].val);
myvector[i].color = "black";
i++;
}
}
void Graph::DFSit(AdjList x, int root)
{
if (x.color == "white")
{
cout << "tree edge ( " << root << "," << x.val << ") " << endl;
}
if (x.color == "gray")
{
cout << "Back Edge ( " << root << "," << x.val << ") " << endl;
return;
}
x.color = "gray";
AdjNode *temp = new AdjNode();
temp = x.front;
int i = 0;
int value;
while (temp != NULL)
{
value = temp->getValue();
while (i != myvector.size())
{
if (value == myvector[i].val)
{
DFSit(myvector[i], root);
}
i++;
}
temp = temp->next;
}
}
答案 0 :(得分:2)
Normaly,DFS rutine的正确实现是使用堆栈,但这也可以。
我认为你正在着色节点AdjList x
并且这个着色不是保存因为你是通过val而不是ref传递它。
尝试将void Graph::DFSit(AdjList x, int root)
更改为void Graph::DFSit(AdjList& x, int root)