图的邻接矩阵表示(DFS,BFS)

原创 2013年12月04日 09:29:09

头文件"Graph.h"

#include<iostream>
#include<queue>
#define UNVISITED 0
#define VISITED 1
#define INEXIST 0
#define EXIST 1
using namespace std;

template<class T>
class AdjGraph{
public:
	T *vertex;//顶点表
	int **edge;//边表
	int *mark;//记录顶点是否被访问
	int vertexNum,edgeNum;//顶点数目,边数目
	AdjGraph(){
		vertexNum=0;
		edgeNum=0;
	}
	~AdjGraph(){
		delete [] vertex;
		delete [] mark;
		for(int i=0;i<vertexNum;i++){
			delete [] edge[i];
		}
		delete [] edge;
	}
	void creatGraph(){
		int a,b;
		cout<<"请输入顶点总数:"<<endl;
		cin>>vertexNum;
		vertex=new T [vertexNum];//建立顶点表
		mark=new int [vertexNum];
		for(int i=0;i<vertexNum;i++)
			mark[i]=UNVISITED;
		//建立边表
		edge=new int* [vertexNum];
		for(int i=0;i<vertexNum;i++)
			edge[i]=new int [vertexNum];
		cout<<"请输入边总数:"<<endl;
		cin>>edgeNum;
		for(int i=0;i<vertexNum;i++)
			for(int j=0;j<vertexNum;j++)
				edge[i][j]=INEXIST;
		cout<<"请输入每个顶点对应的信息:"<<endl;
		for(int i=0;i<vertexNum;i++)
			cin>>vertex[i];
		cout<<"请输入存在边的两个顶点:"<<endl;
		for(int i=0;i<edgeNum;i++){
			cin>>a>>b;
			edge[a][b]=EXIST;
			edge[b][a]=EXIST;
		}

	}
	void DFS(int v){
		mark[v]=VISITED;
		cout<<vertex[v]<<" ";
		for(int i=0;i<vertexNum;i++)
			if(edge[v][i]&&!mark[i])
				DFS(i);
	}
	void DFSTraverse(){
		for(int i=0;i<vertexNum;i++)
			mark[i]=UNVISITED;
		for(int i=0;i<vertexNum;i++)
			if(!mark[i])
				DFS(i);
	}
	void BFS(int v){
		queue<int> vertexQueue;
		mark[v]=VISITED;
		cout<<vertex[v]<<" ";
		vertexQueue.push(v);
		while(!vertexQueue.empty()){
			int u=vertexQueue.front();
			vertexQueue.pop();
			for(int i=0;i<vertexNum;i++)
				if(edge[u][i]&&!mark[i]){
					cout<<vertex[i]<<" ";
					mark[i]=VISITED;
					vertexQueue.push(i);
				}
		}
	}
	void BFSTraverse(){
		for(int i=0;i<vertexNum;i++)
			mark[i]=UNVISITED;
		for(int i=0;i<vertexNum;i++)
			if(!mark[i])
				BFS(i);
	}

};

源文件"main.cpp"

#include<iostream>
#include"Graph.h"
using namespace std;

int main(){
	AdjGraph<char> G;
	G.creatGraph();
	G.DFSTraverse();
	cout<<endl;
	G.BFSTraverse();
	return 0;
}


相关文章推荐

(编程训练)再回首,数据结构——无向图的邻接矩阵表示、DFS、BFS

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。        希望这些能提供给初学者一些参考。         在VC++6.0下可运行,当初还写了不少注释。  ...

图的邻接矩阵表示形式,DFS和BFS,最小生成树Prim和Kruscal,单源最短路径Dijkstra算法

图的邻接矩阵表示: package com.AlgorithmDemo.Graphic; /* * author:Tammy Pi * function:邻接矩阵的图 */ publ...

图的邻接矩阵表示实验

  • 2014年01月10日 16:41
  • 10KB
  • 下载

数据结构--图的邻接矩阵表示法

  • 2013年07月17日 18:36
  • 56KB
  • 下载

C++图的邻接矩阵表示法

代码如下: const int DefaultVertices = 100; const int maxWeight = 1000; template class Graphmtx { f...

图的邻接矩阵表示法

图邻接矩阵表示 1.图的邻接矩阵表示法   在图的邻接矩阵表示法中:   ① 用邻接矩阵表示顶点间的相邻关系   ② 用一个顺序表来存储顶点信息 2.图的邻接矩阵(Adacency Ma...

图的邻接矩阵表示及插入删除等操作

// graphmtx.h #pragma once #include using namespace std;#define DEFAULT_VERTICES_SIZE 10 //默认最大顶点...

java 图的邻接矩阵表示,深度优先遍历,广度优先遍历

转载:http://blog.csdn.net/yxmmao/article/details/51586540 1 . 创建图的邻接矩阵数据结构 public class MGraph {...

图的邻接矩阵表示

#include #include using namespace std; #define MAX_VEX_NUM 20//最大顶点数 queueq; struct MGraph { char v...
  • fym0512
  • fym0512
  • 2012年07月10日 11:03
  • 1336

图的邻接矩阵表示(完整版)

/* *图的邻接矩阵表示 */ #include//EOF(=^Z或F6),NULL #include #include//INT_MAX等 #include #define MAX_NAME ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图的邻接矩阵表示(DFS,BFS)
举报原因:
原因补充:

(最多只允许输入30个字)