数据结构----C++实现非递归和递归的深度优先遍历和广度优先遍历
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了数据结构----C++实现非递归和递归的深度优先遍历和广度优先遍历,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3593字,纯文字阅读大概需要6分钟。
内容图文
![数据结构----C++实现非递归和递归的深度优先遍历和广度优先遍历](/upload/InfoBanner/zyjiaocheng/608/0b40f3ab8e6d47608172280f60651712.jpg)
C++ 非递归深度优先遍历
#include <iostream>
#include <malloc.h>
#include <stack>
using namespace std;
const int MaxSize=6;//图中最多顶点个数
typedef string DataType;
int visited[MaxSize] = {0};//全局数组变量visited初始化
class MGraph{
public:
MGraph();//构造函数
~MGraph();
void DFTraverse(int v);
void BFTraverse(int v);
private:
DataType vertex[MaxSize] = {"v0", "v1", "v2", "v3", "v4", "v5"}; //存储顶点的一维数组
int edge[MaxSize][MaxSize] = {{0,34,46,INT_MAX,INT_MAX,19},
{34,0,INT_MAX,INT_MAX,12,INT_MAX},
{46,INT_MAX,0,17,INT_MAX,25},
{INT_MAX,INT_MAX,17,0,38,25},
{INT_MAX,12,INT_MAX,38,0,26},
{19,INT_MAX,25,25,26,0}}; //邻接矩阵
int vertexNum=MaxSize,edgeNum=MaxSize;
};
MGraph::MGraph(){
}
MGraph::~MGraph(){
}
void MGraph::DFTraverse(int v){//非递归深度优先遍历
stack<int> DF_stack;
DF_stack.push(v);
cout<<vertex[DF_stack.top()];
visited[v]=1;
for(int j=0;j<vertexNum;j++){
if( visited[j] == 0 && (edge[v][j]!=INT_MAX && edge[v][j]!=0 )){
cout<<vertex[j];
visited[j]=1;
v = j;
DF_stack.push(j);
j=0;
}
if(j == vertexNum-1 ){
DF_stack.pop();
}
}
}
int main(){
int i;
MGraph MG{};
for(i=0;i<MaxSize;i++)
visited[i]=0;
cout<<"深度优先遍历序列是:"<<endl;
MG.DFTraverse(0);
cout<<endl;
}
实验结果图:
C++ 递归深度优先遍历
#include <iostream>
#include <malloc.h>
#include <stack>
using namespace std;
const int MaxSize=6;//图中最多顶点个数
typedef string DataType;
int visited[MaxSize] = {0};//全局数组变量visited初始化
class MGraph{
public:
MGraph();//构造函数
~MGraph();
void DFTraverse(int v);
void BFTraverse(int v);
private:
DataType vertex[MaxSize] = {"v0", "v1", "v2", "v3", "v4", "v5"}; //存储顶点的一维数组
int edge[MaxSize][MaxSize] = {{0,34,46,INT_MAX,INT_MAX,19},
{34,0,INT_MAX,INT_MAX,12,INT_MAX},
{46,INT_MAX,0,17,INT_MAX,25},
{INT_MAX,INT_MAX,17,0,38,25},
{INT_MAX,12,INT_MAX,38,0,26},
{19,INT_MAX,25,25,26,0}}; //邻接矩阵
int vertexNum=MaxSize,edgeNum=MaxSize;
};
MGraph::MGraph(){
}
MGraph::~MGraph(){
}
void MGraph::DFTraverse(int v){//深度优先遍历
cout<<vertex[v];
visited[v]=1;
for(int j=0;j<vertexNum;j++)
if(visited[j] == 0 && (edge[v][j]!=INT_MAX && edge[v][j]!=0 ))
DFTraverse(j);
}
int main(){
int i;
MGraph MG{};
for(i=0;i<MaxSize;i++)
visited[i]=0;
cout<<"深度优先遍历序列是:"<<endl;
MG.DFTraverse(0);
cout<<endl;
}
实验结果图:
C++广度优先遍历
#include <iostream>
#include <malloc.h>
#include <stack>
using namespace std;
const int MaxSize=6;//图中最多顶点个数
typedef string DataType;
int visited[MaxSize] = {0};//全局数组变量visited初始化
class MGraph{
public:
MGraph();//构造函数
~MGraph();
void DFTraverse(int v);
void BFTraverse(int v);
private:
DataType vertex[MaxSize] = {"v0", "v1", "v2", "v3", "v4", "v5"}; //存储顶点的一维数组
int edge[MaxSize][MaxSize] = {{0,34,46,INT_MAX,INT_MAX,19},
{34,0,INT_MAX,INT_MAX,12,INT_MAX},
{46,INT_MAX,0,17,INT_MAX,25},
{INT_MAX,INT_MAX,17,0,38,25},
{INT_MAX,12,INT_MAX,38,0,26},
{19,INT_MAX,25,25,26,0}}; //邻接矩阵
int vertexNum=MaxSize,edgeNum=MaxSize;
};
MGraph::MGraph(){
}
MGraph::~MGraph(){
}
void MGraph::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]!=INT_MAX && edge[w][j]!=0 ) && visited[j] == 0){
cout<<vertex[j];
visited[j] = 1;
Q[++rear] = j;
}
}
}
int main(){
int i;
MGraph MG{};
for(i=0;i<MaxSize;i++)
visited[i]=0;
cout<<"广度优先遍历序列是:"<<endl;
MG.BFTraverse(0);
}
实验结果图:
我是热爱学习的呵呵哒~如果你觉得文章很棒,对你有帮助的话,可以点赞+收藏+加关注喔~
如果文章有不正确的地方,欢迎交流指正,我将虚心请教~o(>ω<)o
我会定期更新文章,继续为您提供优质文章
内容总结
以上是互联网集市为您收集整理的数据结构----C++实现非递归和递归的深度优先遍历和广度优先遍历全部内容,希望文章能够帮你解决数据结构----C++实现非递归和递归的深度优先遍历和广度优先遍历所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。