邻接表存储图的模板

//邻接表存储
#include<iostream>
using namespace std;
const int maxsize = 100;
int visited[maxsize] = { 0 };
struct EdgeNode {
	int adjvex;
	EdgeNode* next;
};
template<typename T>
struct VertexNode {
	T vertex;
	EdgeNode* firstEdge;
};
template<typename T>
class ALGraph {
private:
	int vertexnum, edgenum;
	VertexNode<T>adjlist[maxsize];
public:
	ALGraph(T a[], int n, int e);
	~ALGraph();
	void shenBL(int v);
	void guangBL(int v);
};
template<typename T>
ALGraph<T>::ALGraph(T a[], int n, int e) {
	vertexnum = n; edgenum = e;
	for (int i = 0; i < verternum; i++) {
		adjlist[i].vertex = a[i];
		adjlist[i].firstEdge = nullptr;
		
	}
	for (int i = 0; i < edgenum; i++) {
		int j, k;
		cin >> j >> k;
		EdgeNode<T>* s = new EdgeNode;
		s->adjvex = k;
		s->next = adjlist[i].firstEdge;
		adjlist[i].firstEdge = s;
	}
}
template<typename T>
ALGraph<T>::~ALGraph() {
	EdgeNode<T>* p=nullptr, * q=nullptr;
	for (int i = 0; i < vertexnum; i++) {
		p = q = adjlist[i].firstEdge;
		while (q != nullptr) {
			p = p->next;
			delete q;
			q = p;
		}
	}
}
//深度优先遍历
template<typename T>
void ALGraph<T>::shenBL(int v) {
	EdgeNode* p = adjlist[v].firstEdge;
	cout << adjlist[v].vertex; visited[v] = 1;
	while (p != nullptr) {
		int j = p->adjvex;
		if (visited[j] != 0) {
			shenBL(j);
		}
		p = p->next;
	}
}
//广度优先遍历
template<typename T>
void ALGraph<T>::guangBL(int v) {
	int Q[maxsize];
	int front = -1, rear = -1;
	EdgeNode* p = nullptr;
	cout << adjlist[v].vertex; visited[v] = 1;
	Q[++rear] = v;
	while (rear != front) {
		int w = Q[++front];
		p = adjlist[w].firstEdge;
		while (p != nullptr) {
			int j = p->adjvex;
			if (visited[j] == 0) {
				cout << adjlist[j].vertex; visited[j] = 1;
				Q[++rear] = j;
			}
			p = p->next;
		}
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值