BFS广度优先搜索(邻接表)

算法思想:
    依次遍历邻接表中未被标记的节点

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace std;

struct EdgeNode {
	int adjvex;    //邻接点域
	int weight;    //存储权值
	struct EdgeNode *next;		//下一节点指针
};

struct VertexNode {
	int data;		//点数据
	struct EdgeNode *next;	//指针域
};

class Graph
{
private:
	int vex_num;
	int edge_num;
	struct VertexNode *p;
	int *visit;
public:
	Graph(int vex_num, int edge_num);
	~Graph();
	void CreateGraph();
	void BFS(int start);
	//void Display();
};

Graph::Graph(int vex_num, int edge_num)
{
	this->vex_num = vex_num;
	this->edge_num = edge_num;
	visit = new int[vex_num];
	memset(visit, 0, sizeof(int)*vex_num);
	p = NULL;
}

Graph::~Graph()
{
	struct EdgeNode *q1 = p->next;
	struct EdgeNode *q2;
	for (int i = 0; i < vex_num; ++i)
	{
		q1 = (p + i)->next;
		while (q1 != NULL)
		{
			q2 = q1;
			q1 = q1->next;
			delete  []q2;
		}
	}
}

void Graph::CreateGraph()
{
	int i, j, weight;
	cout << "input the imformation of vex" << endl;
	p = new struct VertexNode[vex_num];
	for (int i = 0; i < vex_num; ++i)	//初始化顶点表
	{
		cin >> (p + i)->data;
		p[i].next = NULL;
	}
	cout << "input edge" << endl;
	for (int k = 0; k < edge_num; ++k)
	{
		cin >> i >> j >> weight;
		struct EdgeNode *q1 = new struct EdgeNode;
		q1->adjvex = j;
		q1->weight = weight;
		q1->next = (p + i - 1)->next;
		(p + i - 1)->next = q1;

		struct EdgeNode *q2 = new struct EdgeNode;
		q2->adjvex = i;
		q2->weight = weight;
		q2->next = (p + j - 1)->next;
		(p + j - 1)->next = q2;
	}
}

void Graph::BFS(int start)
{
	struct EdgeNode *q;
	for (int i = 0; i < vex_num; ++i)
	{
		if (!visit[(p + start-1)->data-1])
		{
		       visit[(p + start-1)->data-1] = 1;
                       cout << (p + start-1)->data << " ";
		}
		q = (p + i)->next;
		while (q != NULL)
		{
			if (!visit[q->adjvex - 1])
			{
				cout << q->adjvex << " ";
				visit[q->adjvex - 1] = 1;
			}
			q = q->next;
		}
	}
}

int main()
{
	Graph g(6, 8);
	g.CreateGraph();
	g.BFS(1);
	return 0;
}


注:本篇博客仅供本人参考学习使用

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/80187859