《数据结构》实验六-----邻接矩阵 无向图

前端之家收集整理的这篇文章主要介绍了《数据结构》实验六-----邻接矩阵 无向图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

实验目的

巩固图的相关知识。掌握图的主要存储方法和遍历方法,学会运用图的知识解决实际问题。

1.图的逻辑结构和存储方法,清楚掌握图的遍历操作。

2.掌握图的存储方法的实现代码

3.学习图的相关知识来解决实际问题。

实验内容

1.自己画一无个图(有向或无向均可),使用分别邻接矩阵和邻接表存放图。实现图的输入,并使用两种遍历方法输出图顶点。

@H_301_23@图结构如下:

@H_301_23@

@H_301_23@代码

文件MGraph.h:

#ifndef MGraph_H
#define MGraph_H
const int N = 10;
template<class T>
class MGraph
{
public:
	MGraph(T arr[],int n,int e);
	~MGraph(){};
	void BFS(int v);
	void DFS(int v);
private:
	T vertex[N];
	int arc[N][N];
	int vertexNum,arcNum;
};
template<class T>
MGraph<T>::MGraph(T arr[],int e)
{
	int i,j,k;
	vertexNum = n,arcNum = e;
	for (i = 0; i < vertexNum; i++)
		vertex[i] = arr[i];
	for (i = 0; i < vertexNum; i++)
		for (j = 0; j < vertexNum; j++)
			arc[i][j] = 0;
	for (k = 0; k < arcNum; k++)
	{
		cout << "输入两点的编号:\n";
		cin >> i;
		cin>> j;
		arc[i][j] = 1; arc[j][i] = 1;
	}
}
template<class T>
void MGraph<T>::DFS(int v)
{
	int j;
	cout << vertex[v];
	visited[v] = 1;
	for (j = 0; j < vertexNum; j++)
		if (arc[v][j] == 1 && visited[j] == 0)
			DFS(j);
}
template<class T>
void MGraph<T>::BFS(int v)
{
	int Q[N];
	int front = -1; 
	int 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;
			}
	}
}
#endif
文件MGraph_main.cpp:

#include<iostream>
#include<stdlib.h>
#include"MGraph.h"
using namespace std;
char response;
int visited[N]={0};
int main()
{
	char S[]{'A','B','C','D','E','F'};
	MGraph<char> G(S,6,6);
	for (int i = 0; i < N; i++)
		visited[i] = 0;
	cout << "深度优先遍历的序列为:";
	G.DFS(0);
	cout << endl;
	for (int i = 0; i < N; i++)
		visited[i] = 0;
	cout << "广度优先遍历的序列为:";
	G.BFS(0);
	cout << endl;
	system("pause");
	return 0;
}
@H_301_23@运行截图:

@H_301_23@

猜你在找的数据结构相关文章