任务描述
本关任务:实现 graph.cpp 里的函数int Graph_DepthFirst(Graph*g, int start, Edge* tree)
。 注意遵守约定:编号大的先进栈。
相关知识
图 2 给出了对图 1 的无向图的存储结构图:每个顶点的名称由一个字符串描述,所有字符串的起始地址组织为一个数组,数组的起始地址为vetex
;顶点的相邻关系保存在相邻矩阵中,其起始地址为adj
,adj[i*n+j]
的值为 1 表示i
号顶点到j
号顶点有边,为 0 表示无边,其中n
是顶点个数,i
和j
是顶点在顶点表中的编号。 将n,vetex,adj
组织成结构:
struct Graph {
int n;//顶点数
char** vetex;
int* adj;
};
给定指向该结构的指针g
,就可以对图进行操作。
深度优先遍历算法(伪代码):
DepthFirst(Graph, start)
//输入Graph是图,start是开始顶点的编号
//输出:tree_edge[i]=<from,to>是遍历树的一条边
//tree_edge[1..n-1]为遍历树的n-1条边
//tree_edge[0].to … tree_edge[n-1].to是遍历序列
PUSH(<-1,start>)
k=0;
while(StackNotEmpty) {
<a,b>=POP;