图的深度遍历没有进入递归函数

发布于 2022-09-02 19:44:27 字数 1815 浏览 27 评论 0

#include<iostream>
using namespace std;
const int MaxSize = 10;
template<class T>
class MGraph{
    
public :
    MGraph(T a[], int n, int e);//n个顶点e条边
    void DFSTraverse(int v);
    void visited(int max);

private:
    T vertex[MaxSize];
    int arc[MaxSize][MaxSize];
    int vertexNum, arcNum;
    int arrvisited[6];
    //arrvisited[] = {0,0,0,0,0,0}
};
template<class T>MGraph<T>::MGraph(T a[], int n, int e){
    int i = 0, j = 0;
    vertexNum = n; arcNum = e;
    for ( i = 0; i < vertexNum; i++)
        vertex[i] = a[i];
    for ( i = 0; i < vertexNum;i++)
    for (j = 0; j < vertexNum; j++)
        arc[i][j] = 0;
    cout << "请输入每条边所依附的两个顶点的序号:" << endl;
    for (int k = 0; k < arcNum; k++){
        cin >> i >> j;
        arc[i][j] = 1;
        arc[j][i] = 1;
    }
    cout << "执行此处3" << endl;
    
    for (int i = 0; i < 6; i++){ arrvisited[i] = 0; }
}
/*
template<class T>void MGraph<T>::visited(int max){
    cout << "执行此处2" << endl;
    for (int i = 0; i < max; i++){
        arrvisited[i] = 0;
    }
}
*/

template<class T>void MGraph<T>::DFSTraverse(int v){
    cout << "执行此处1" << endl;
    cout << vertex[v];
    arrvisited[v] = 1;
    for (int j = 0; j < vertexNum; j++){
        cout << "准备进入递归了" << endl;
        if (arc[v][j] == 1 && arrvisited[j] == 0) DFSTraverse(j);
        cout << "真的进入递归了" << endl;
    }
    
}

上面是我的头文件,构造函数没有问题,arrvisited[]是用来标记顶点是否被访问过的,在构造函数里一并初始化了。
图片描述
这个图是我运行结果,“准备进入递归”和“已经进入递归”是用来测试的。不懂为什么递归语句的前一句和后一句都执行了,但是却输出不了除了A这个点剩下的几个点,这是没有进入递归吗?求解

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文