无向图的DFS/BFS遍历

《无向图的DFS/BFS遍历》

#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;
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/qq_41061455/article/details/80146736
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞