问题遇到的现象和发生背景
就是照着书上敲代码,然后发现和书上面即使是一样,却发生了bug
问题相关代码,请勿粘贴截图
//头文件
#ifndef MGraph_H //避免重复包含MGraph.h文件
#define MGraph_H
const int MaxSize = 10; //图中最多顶点个数
template<class DataType>
class MGraph {
public:
MGraph(DataType a[], int n, int e); //构造函数,建立有n个顶点e条边的图
~MGraph() {}; //析构函数
void DFSTraverse(int v); //深度优先遍历
void BFSTraverse(int v); //广度优先遍历
private:
DataType vertex[MaxSize]; //存放途中顶点的数组
int arc[MaxSize][MaxSize]; //存放途中边的数组
int vertexNum, arcNum; //图的顶点数和边数
};
#endif
//类函数实现类文件:
#include<iostream> //引入输入输出流
using namespace std;
#include"MGraph.h" //引入类MGraph的声明
//以下是对类MGraph的成员函数定义
template <class DataType>
MGraph<DataType>::MGraph(DataType a[], int n, int e) {
int i, j, k;
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;
}
for (k = 0; k < arcNum; k++) { //存储变得信息
cout << "请输入边的两个顶点序号:";
cin >> i >> j;
arc[i][j] = 1; arc[j][i] = 1;
}
}
template<class DataType>
void MGraph<DataType>::DFSTraverse(int v) { //深度优先遍历图
cout << vertex[v]; visited[v] = 1;
for (int j = 0; j < vertexNum; j++)
if (arc[v][j] == 1 && visited[j] == 0)
DFSTraverse(j);
}
template<class DataType>
void MGraph<DataType>::BFSTraverse(int v) //广度优先遍历图
{
int Q[MaxSize]; //假设队列采用顺序存储且不会发生溢出
int front = -1, rear = -1; //初始化队列
cout << vertex[v]; visited[v] = 1; Q[++rear] = v; //被访问点入队
while (front != rear) {
v = Q[++front];
for (int j = 0; j < vertexNum;j++) {
if (arc[v][j] == 1 && visited[j] == 0) {
cout << vertex[j]; visited[j]=1; Q[++rear] = j;
}
}
}
}
//main函数文件
#include<iostream> //引入输入输出流
using namespace std;
#include"MGraph.cpp" //引入类MGraph的成员函数定义
int visited[MaxSize];
//以下是主函数
int main() {
char ch[] = {'A','B','C','D','E'}; //定点信息
MGraph<char> MG(ch, 5, 6); //图中顶点信息是char型
for (int i = 0; i < MaxSize;i++) { //初始化图中所有顶点均未被访问
visited[i] = 0;
}
cout << "深度优先遍历序列是:";
MG.DFSTraverse(0); //从顶点0出发进行深度优先遍历图
cout << endl;
for (int i = 0; i < MaxSize;i++) { //初始化途中所有顶点均未被访问
visited[i] = 0;
}
cout << "广度优先遍历序列是:";
MG.BFSTraverse(0); //从顶点0出发广度优先遍历图
cout << endl;
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
使用过将沈明visited放到函数实现类文件的头部,但是出现了其他bug,说是以及有声明了
我想要达到的结果
解决这visited问题