1、 邻接矩阵(验证实验【必做】)
以lab5_1.cpp为基础,参考课本180页-182页的内容,建立无向图的邻接矩阵存储结构,对建立的无向图进行深度优先遍历和广度优先遍历。请把答案代码直接补充在源文件中。课本178页图6-7的输入和输出样张如下图所示。
#include <iostream>
using namespace std;
const int MaxSize = 10; //图中最多顶点个数
int visited[MaxSize]={0};//对全局的点初始化,表示都没有被访问
template <class DataType>
class MGraph
{
public:
MGraph(DataType a[] , int n, int e); //构造函数,建立具有n个顶点e条边的图
~MGraph( ){} //析构函数为空
void DFTraverse(int v); //深度优先遍历图
void BFTraverse(int v); //广度优先遍历图
private:
DataType vertex[MaxSize]; //存放图中顶点的数组
int edge[MaxSize][MaxSize]; //存放图中边的数组
int vertexNum, edgeNum; //图的顶点数和边数
};
补充1//
//构造函数-图的建立
template <class DataType>
MGraph<DataType>::MGraph(DataType a[], int n, int e)
{
int i, j, k;
vertexNum = n;
edgeNum = e;
//存放顶点
for(i = 0; i < vertexNum; i++)
vertex[i] = a[i];
//初始化邻接矩阵
for(i = 0; i < vertexNum; i++)
for(j = 0; j < vertexNum; j++)
edge[i][j] = 0;
//依次输入每一条边
for(k = 0; k < edgeNum; k++)
{
cout<< "请输入两个边的顶点序号:";
cin >>i >>j;//输入边依附的两个顶点的编号
edge[i][j] = 1;
edge[j][i] = 1;//初始化边
}
}
//深度优先遍历
template <class DataType>
void MGraph<DataType>::DFTraverse(int v)
{
cout <<vertex[v];
visited[v] = 1;//访问了的点,就改写为1,表示已经访问过了
for(int j = 0; j < vertexNum; j++)
if(edge[v][j] == 1 && visited[j] == 0)//如果边存在,且点没被访问
DFTraverse(j);
}
//广度优先遍历
template <class DataType>
void MGraph<DataType>::BFTraverse(int v)
{
int w, j, Q[MaxSize];//采用顺序队列
int front = -1, rear = -1;
cout <<vertex[v];
visited[v] = 1;//输出顶点的值,表示已经访问
Q[++rear] = v;//别访问的顶点入队
while(front!=rear)//当队列非空,头尾不相等,队列就不为空
{
w = Q[++front];//将队头元素出队送到v中
for(j = 0; j < vertexNum; j++)
if(edge[w][j] == 1 && visited[j] == 0)//如果边存在,点未被访问
{
cout <<vertex[j];//输出点数据
visited[j] = 1;//表示已经访问
Q[++rear] = j;//推下一个进来
}
}
}
//
int main( )
{
int i;
char ch[]={'A','B','C','D','E','F'};
MGraph<char> MG(ch, 6, 6);//建立6个顶点,6条边的无向图
补充2//
for(i = 0; i < MaxSize; i++)
visited[i] = 0;//对每个点初始化未被访问
cout << "深度优先遍历序列是:";
MG.DFTraverse(0);//从顶点0出发进行深度优先遍历
cout << "\n";
for(i = 0; i < MaxSize; i++)
visited[i] = 0;
cout<< "广度优先遍历序列是:";
MG.BFTraverse(0);//从顶点0出发进行广度优先遍历
return 0;
//
}
太难了,完全是照着书本来,不然根本不会(捂脸)
磕磕碰碰,各种小错误,完全像新学一样,懵懵懂懂的,什么都不懂。