深度优先遍历 邻接表方法的BUG



void DFS(GraphList& g) {
	bool* visited = new bool[g.vertexNum];

	for (int i = 0; i < g.vertexNum; i++) {
		visited[i] = false;
	}
	stack 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]   &&两边的顺序颠倒了,就会报异常

深度优先遍历 邻接表方法的BUG_第1张图片

原因:访问了NULL的POS 

解决方法:把判断newNode 写到 visited 前  就解决了

 

 

你可能感兴趣的:(深度优先,bug,算法)