运行结果:

mathmatica版本11.1 下面为代码
If[Length[Names["`*"]] > 0, Remove["`*"]];
edge1 = {
a <-> b, a <-> e, a <-> f, a <-> g, c <-> g, c <-> d,
d <-> g, d <-> e, e <-> f, f <-> g};
gragh = Graph[edge1, PlotTheme -> "Detailed"]
(*节点表*)
node = {
a, b, c, d, e, f, g};
(*邻接表*)
adjacencylist = {
{
b, e, f, g}, {
a}, {
d, g}, {
c, e, g}, {
a, d, f}, {
a,
e, g}, {
a, c, d, f}};
(*用关联表存储过程数据*)
asslist = Association[Thread[node -> adjacencylist]];
(*初始化数据集*)
(*初始化空表--根节点、子节点、树--边*)
{
root, subNode, T} = {
{
}, {
}, {
}};
(*标注表,边集,分支节点集,非访问节点集*)
{
labeltab, edgetab, branchtab, noAcess} = {
{
}, {
}, {
}, {
}};
bufProcess = Association["lable" -> {
}, "edge" -> {
}, "brach" -> {
}];
label[node_, step_] := step - 1;
(*第一步*)
step = 1;(*全局标识*)
v = node[[5]];(*第一个节点*)
root = AppendTo[root, v];(*根节点*)
curNode = v;(*当前节点*)
prenode = v;(*上一个节点*)
subNode = asslist[v];(*当前子节点*)
tmp = <|"lable" -> AppendTo[labeltab, v -> label[v, step]],
"edge" -> {
}, "brach" -> AppendTo[branchtab, curNode]|>;
(*建立一个关联表*)
AssociateTo[bufProcess, tmp];
(*自定义函数*)
DFS[node_] := Module[
{
i = 1, w, buflist = asslist, nextnode, tmp},
(*无访问节点集*)
noAcess = asslist[node];
(*当前节点子节点集与无访问节点集存在交集--且无访问集非0*)
While[IntersectingQ[asslist[curNode], noAcess] &&
Length@noAcess != 0,
(*非访问集队列中第一个*)
w = noAcess[[i]];
(*追加标识到标识表*)
If[! MemberQ[Keys@labeltab, w],
(*全局标识+1*)
step += 1;
AppendTo[labeltab, w -> label[w, step]];
AppendTo[branchtab, w];
];
(*追加边到T*)
AppendTo[T, curNode -> w];
(*删除访问过的节点*)
noAcess = Delete[noAcess, Position[noAcess, w]
(*从子节点集删除访问过的节点*)
Delete[subNode, Position[subNode, w]];
(*删除节点*)
asslist = Delete[asslist, Position[asslist, w]];
(*更新回溯节点*)
prenode = curNode;
(*更新当前节点为非访问中的节点*)
curNode = w;
(*更新当前节点的子节点集*)
subNode = asslist[w];
Print[labeltab];
Print["curNode", "->", curNode, " ", "subNode", "->", subNode];
tmp = <|"lable" -> labeltab, "edge" -> T, "brach" -> branchtab|>;
AssociateTo[bufProcess, tmp];
If[Length@subNode == 0,
(*递归*)
(*子节点集为0时,更新当前节点为前一个节点,访问上一个节点*)
curNode = prenode;
DFS[curNode],
(*子节点集不为空时,访问子节点*)
DFS[w]
];
];
Return[bufProcess];
]
DFS[curNode];
Graph[bufProcess["edge"], PlotTheme -> "Detailed"]