//深度遍历邻接表 void DFSALGraph(ALGraph G,int i) { //--------补充代码--Start------ //--------补充代码--End------ } 用c++补齐
时间: 2023-11-17 09:04:27 浏览: 288
以下是深度遍历邻接表的C++代码实现:
```c++
void DFS(ALGraph G, int i) {
printf(" %d", i);
visited[i] = 1;
for (ArcNode* w = G.vertices[i].firstarc; w != NULL; w = w->nextarc) {
if (visited[w->adjvex] == 0) {
DFS(G, w->adjvex);
}
}
}
```
其中,`visited`是一个全局数组,用于记录每个节点是否被访问过。在每次访问一个节点时,将其标记为已访问,并递归访问其未被访问过的邻居节点。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "ALGraph.h" int visited[MAXVEX]; /设访问标志数组为全局变量/ void DFSTraverse(ALGraph g)/深度优先遍历以邻接表存储的图g/ { int i; for(i=0;i<g.vexnum;i++) /访问标志数组初始化/ visited[i]=0; for(i=0;i<g.vexnum;i++) if(!visited[i]) DFS(g,i); /对尚未访问的顶点调用DFS函数/ } void DFS(ALGraph g, int i)/从未被访问的顶点Vi出发深度优先遍历图g/ { // 请在这里补充代码,完成本关任务 /********** Begin *********/ /********** End **********/ }在begin和end之间完成代码
请在 `DFS` 函数的 `// 请在这里补充代码,完成本关任务` 的部分添加以下代码:
```c
visited[i] = 1; // 将当前顶点标记为已访问
printf("%c ", g.vertices[i].data); // 输出当前访问的顶点值
// 遍历当前顶点的邻接表,递归访问未访问的邻接顶点
ArcNode* p = g.vertices[i].firstarc;
while (p) {
if (!visited[p->adjvex]) {
DFS(g, p->adjvex);
}
p = p->nextarc;
}
```
这段代码实现了深度优先遍历,首先将当前顶点标记为已访问,然后输出当前访问的顶点值。接着遍历当前顶点的邻接表,如果某个邻接顶点未被访问过,则递归调用 DFS 函数进行访问。这样就可以完成深度优先遍历图的操作。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "ALGraph.h" int visited[MAXVEX]; /*设访问标志数组为全局变量*/ void DFSTraverse(ALGraph g)/*深度优先遍历以邻接表存储的图g*/ { int i; for(i=0;i<g.vexnum;i++) /*访问标志数组初始化*/ visited[i]=0; for(i=0;i<g.vexnum;i++) if(!visited[i]) DFS(g,i); /*对尚未访问的顶点调用DFS函数*/ } void DFS(ALGraph g, int i)/*从未被访问的顶点Vi出发深度优先遍历图g*/ { // 请在这里补充代码,完成本关任务 /********** Begin *********/ /********** End **********/ }
void DFS(ALGraph g, int i)/*从未被访问的顶点Vi出发深度优先遍历图g*/
{
visited[i] = 1; /*将顶点i标记为已访问*/
printf("%c ", g.vertices[i].data); /*输出顶点i的值*/
EdgeNode *p = g.vertices[i].firstedge; /*获取顶点i的第一个邻接边*/
while (p) {
if (!visited[p->adjvex]) { /*如果该邻接顶点未被访问*/
DFS(g, p->adjvex); /*递归调用DFS函数*/
}
p = p->next; /*继续遍历下一个邻接边*/
}
}
阅读全文