第六章:图。(邻接表实现图的存储及dfs、bfs)

本文详细介绍了如何使用邻接表数据结构创建图,并通过深度优先遍历和广度优先遍历算法进行图的遍历。包括图的初始化、边的创建以及两种遍历算法的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//bfs后续补充;
#include <stdio.h>
#include <string.h>
#define N 100
/*
需要:
    1.定义顶点数据类型;//一开始便申请n个数据空间来存放顶点数据;
    2.定义边数据类型;//每次多一条边的时候再申请一个空间
*/
typedef struct E
{
    //
    int number;
    char e;
    E *next;
}E;
typedef struct V
{
    //顶点
    int number;
    char v;
    E *next;
}V;V v[N];
int vnumber,enumber;
//以邻接表为数据结构创建图;
int Search(char x)
{
    for(int i=0;i<vnumber;i++)
        if(v[i].v==x) return i;
    return -1;
}
void Creat()
{
    int i,j;
    printf("请输入顶点个数与边的个数:\n");
    scanf("%d %d",&vnumber,&enumber);getchar();
    printf("请输入每个顶点的信息:\n");
        for(i=0;i<vnumber;i++) {scanf("%c",&v[i].v);v[i].number=Search(v[i].v);v[i].next=NULL;}getchar();//吸收最后的回车;
    //这里由于边还未定义,故省去初始化边的一部。但是需要初始化顶点的next指针为NULL;
    printf("请输入每条边的信息:\n");
    char x,y;int a,b;
    for(i=0;i<enumber;i++) 
    {
        scanf("%c %c",&x,&y);getchar();
        a=Search(x);b=Search(y);//从顶点数组v[]中寻找坐标返回;

        //第一个:
        E *p1=new E;
        p1->number=b;p1->e=y;
        p1->next=v[a].next;v[a].next=p1; //将新生成的结点加入顶点a的边表头部;
        //第二个:
        E *p2=new E;
        p2->number=a;p2->e=x;
        p2->next=v[b].next;v[b].next=p2;
    }
    printf("创建连接表图成功!\n");
}

int vis[N];
void dfs(int number)
{
    //深度优先遍历;
    printf("%c  ",v[number].v);vis[number]=1;
    E *p=v[number].next;
    while(p!=NULL)
    {
        int m=p->number;//表示顶点m访问过;
        if(vis[m]==0) dfs(m);//如果m个顶点没有访问过,则访问其邻接点;
        p=p->next;
    }
}
void bfs()
{
    //后续补充;
}
int main()
{
    vnumber=enumber=0;
    Creat();

    for(int i=0;i<N;i++) vis[i]=0;
    dfs(0);//从第0个顶点开始访问;
    
    for(int i=0;i<N;i++) vis[i]=0;
    bfs();
    return 0;
}

 

转载于:https://www.cnblogs.com/songacm/p/3394261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值