用邻接表实现该图的广度优先搜索遍历

#include<iostream.h>

const intn=8;               //表示图中的最大顶点数

const inte=15;                     //图中的最大边数

typedefint elemtype;

boolvisited[n+1];           //标志数组用于记载某个顶点是否被访问过

classlink                  //定义链表类型

{

public:

elemtype data;

link *next;

};

classGRAPH              //定义邻接表的表头类型

{

public:

linka[n+1];

voidcreatlink()            //建立图的邻接表

{

inti,j,k;

link *s;

for(i=1;i<=n;i++)          //建立邻接表的表头类型

{

a[i].data=i;

a[i].next=NULL;

}

for(k=1;k<=e;k++)

{

cout<<“请输入一条边”;

cin>>i>>j;                //输入一条边(i,j)

cout<<endl;

s=newlink;               //申请一个动态存储单元

s->data=j;

s->next=a[i].next;          //头插法建立链表

a[i].next=s;               //头插法建立链表

s=newlink;

s->data=i;

s->next=a[j].next;          //头插法建立链表

a[j].next=s;                //头插法建立链表

}

}

voidbfs1(int i)             //用邻接表从顶点i出发进行广度优先搜索遍历

{

intq[n+1];                 //定义队列

int f,r;

link*p;                   //p为搜索指针

f=r=0;

cout<<a[i].data<<“”;

visited[i]=true;

r++;

q[r]=i;                     //进队

while(f<r)

{

f++;

i=q[f];                    //出队

p=a[i].next;

while(p!=NULL)

{

if(!visited[p->data])

{

cout<<a[p->data].data<<“”;

visited[p->data]=true;

r++;

q[r]=p->data;              //进队

}

p=p->next;

}

}

}

};

voidmain()

{

link *p;

int yn=1;

GRAPH G;

G.creatlink();              //建立邻接表

while(yn==1)

{

for(inti=1;i<=n;i++)        //输出邻接表

{

p=G.a[i].next;

cout<<G.a[i].data<<“->”;

while(p->next!=NULL)

{

cout<<p->data<<“->”;

p=p->next;

}

cout<<p->data<<endl;

}

for(i=1;i<=n;i++)

visited[i]=false;

cout<<“请输入广度优先搜索开始访问的顶点”;

cin>>i;

cout<<endl;

cout<<“从”<<i<<“出发的广度优先搜索遍历序列为”<<endl;

G.bfs1(i);

cout<<endl;

cout<<“继续遍历吗(1/2)?”;

cin>>yn;                                

}

}

《用邻接表实现该图的广度优先搜索遍历》

《用邻接表实现该图的广度优先搜索遍历》

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/u011181633/article/details/30282023
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞