图的深度遍历没有进入递归函数
#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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论