void DFS(GraphList& g) {
bool* visited = new bool[g.vertexNum];
for (int i = 0; i < g.vertexNum; i++) {
visited[i] = false;
}
stack<int> st;
visited[0] = true;
cout << g.head[0].name << ' ';
st.push(0);
//newNode = g.head[0].first;
while (!st.empty()) {
int top = st.top();
edgeNode* newNode = g.head[top].first;
while (newNode) {
while ( newNode && visited[newNode->position]) {
newNode = newNode->next;
}
if (newNode) {
visited[newNode->position] = true;
cout << g.head[newNode->position].name << ' ';
newNode = g.head[newNode->position].first;
st.push(newNode->position);
}
}
st.pop();
}
delete[] visited;
}
第一个问题就是 搞混了 定义对象 和 分配在堆区 ,new bool后,一个是括号,一个是方框.
第二个问题是while()中 newNode && visited[newNode->position] &&两边的顺序颠倒了,就会报异常
原因:访问了NULL的POS
解决方法:把判断newNode 写到 visited 前 就解决了