#include<bits/stdc++.h>
using namespace std;
int vis[25],flag=1;
queue<int>s;
typedef struct node //边结点
{
int a; //该边所指向的顶点的位置
struct node *next; //指向下一条边的指针
}node;
typedef struct nod
{
int data; //顶点信息
node *f; //指向第一条依附该顶点的边的指针
}nod,C[25];
typedef struct
{
C v; //邻接表
int c,d; //图的当前顶点数和边数
}T;
int Locate(T G,int V)
{
for(int i=0;i<G.c;i++)
if(G.v[i].data==V)
return i;
return -1;
}
void creat(T &G)
{
scanf("%d,%d",&G.c,&G.d);
for(int i=0;i<G.c;i++)
{
scanf("%d",&G.v[i].data);
G.v[i].f=NULL;
}
for(int i=0;i<G.d;i++)
{
int v1,v2;
scanf("%d,%d",&v1,&v2);
int m=Locate(G,v1),n=Locate(G,v2);
node *p=new node;
p->a=n;
p->next=G.v[m].f;
G.v[m].f=p;
node *k=new node;
k->a=m;
k->next=G.v[n].f;
G.v[n].f=k;
}
}
void BFS(T G,int V)
{
printf("%d",G.v[V].data);
vis[V]=1;
s.push(V);
node *p=G.v[V].f;
while(p!=NULL)
{
int w=p->a;
s.push(w);
p=p->next;
}
while(!s.empty())
{
int k=s.front();
p=G.v[k].f;
while(p)
{
int w=p->a;
if(!vis[w])
{
s.push(w);
printf(",%d",G.v[w].data);
vis[w]=1;
}
p=p->next;
}
s.pop();
}
}
void DFS(T G,int V)
{
if(flag)
{
printf("%d",G.v[V].data);
flag=0;
}
else printf(",%d",G.v[V].data);
vis[V]=1;
node *p=G.v[V].f;
while(p!=NULL)
{
int w=p->a;
if(!vis[w]) DFS(G,w);
p=p->next;
}
}
int main()
{
T G;
creat(G);
memset(vis,0,sizeof(vis));
DFS(G,0);
printf("\n");
memset(vis,0,sizeof(vis));
BFS(G,0);
printf("\n");
return 0;
}
无向图的DFS/BFS遍历
原文作者:数据结构之图
原文地址: https://blog.csdn.net/qq_41061455/article/details/80146736
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_41061455/article/details/80146736
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。