图的存储与遍历算法-数据结构 第3页
//定义一个队列q,其元素类型为整形
int front=0,rear=0;
//定义队首和队尾指针
cout<<i<<' ';
//访问Vi
visited[i]=true;
//标记初始点Vi已访问过
q[++rear]=i;
//将已访问过的初始点序号i入队
while(front!=rear){
//当队列非空时进行循环处理
front=(front+1)%MaxLength;
//删除队首元素,第一次执行时k的值为i
int k=q[front];
edgenode* p=GL[k];
//取Vk邻接表的表头指针
while(p!=NULL){
//依次搜索Vk的每一个结点
int j=p->adjvex;
//Vj为Vk的一个邻接点
if(!visited[j]){
//若Vj没有被访问过则进行处理
cout<<j<<' ';
visited[j]=true;
rear=(rear+1)%MaxLength;
q[rear]=j;
}
p=p->next;
}
}
}
void Check(int n,int & i,int & j)
//检查输入的边序号是否越界,若越界则重输
{
while(1){
if(i<=0||i>n||j<=0||j>n)
cout<<"输入有误,请重新输入!";
else return;
cin>>i>>j;
}
}
主函数程序文件 主函数.cpp
#include<iostream.h>
#include"图.h"
void main()
{
int i,n,m;
cout<<"=============="<<endl;
www.751com.cn cout<<"输入是否有向(0为无,1为有):";
cin>>m;
bool*visited=new bool[n];
adjlist gl;
InitGAdjoin(gl,n);
CreateAdjoin(gl,n,m);
cout<<"=============="<<endl;
cout<<"图的深度优先遍历序列:"<<endl;
for(i=1;i<=n;i++)visited[i]=false;
dfsAdjoin(gl,visited,1,n);
cout<<endl<<"=============="<<endl;
cout<<"图的广度优先遍历序列:"<<endl;
for(i=1;i<=n;i++)visited[i]=false;
bfsAdjoin(gl,visited,1,n);
cout<<endl;
}上一页 [1] [2] [3] [4] 下一页
图的存储与遍历算法-数据结构 第3页下载如图片无法显示或论文不完整,请联系qq752018766