我在无向图中调试 DFS 的实现时遇到问题。
运行过程中,顶点1两次入栈,真不知道为什么会这样。
我在这里附加我的功能:
void dfsFromMatrix(uint64_t **matrix, unsigned vertexes, unsigned root) {
unsigned *markedItems;
stack *stackPointer;
unsigned tempVertex;
unsigned i;
markedItems = (unsigned *) calloc(vertexes, sizeof(unsigned));
stackPointer = NULL;
stackPointer = stackPush(stackPointer, root);
while (!checkIfStackIsEmpty(stackPointer)) {
tempVertex = stackPointer -> data;
#ifdef _DEBUG_
printf("tempVertex = %u\n", tempVertex);
#endif
stackPointer = stackPop(stackPointer);
if (!markedItems[tempVertex]) {
markedItems[tempVertex] = 1;
#ifdef _DEBUG_
printf("DFS: Marquei o vértice %u\n", tempVertex);
printStack(stackPointer);
#endif
for (i = 1 ; i <= vertexes ; i++)
if (getValueFromMatrix(matrix, tempVertex, i)) {
stackPointer = stackPush(stackPointer, i);
printf("Entrei na fila: %u\n", i);
}
}
}
}
关于 for 循环。它实际上从一个开始并以 <= 顶点结束。getValueFromMatrix 函数处理这个问题,所以我可以使用人类可以理解的矩阵位置。
谢谢你的帮助,