第五章 图论 邻接表存图

邻接表存图

存储结构

cpp 复制代码
#define MaxSize 10
typedef char DataType;
typedef struct EdgeNode{ // 定义边表节点 
    int adjvex;
    struct EdgeNode *next; 
} EdgeNode;

typedef struct{ // 定义顶点表结点
    DataType vertex;
    EdgeNode *first;
} vertexNode;

typedef struct{
    vertexNode adjlist[MaxSize]; // 存放顶点表的数组
    int vertexNum, edgeNum; // 图的顶点数和边数
} ALGraph;

有向图邻接表的建立

cpp 复制代码
void CreateGraph(ALGraph *G, DataType a[], int n, int m){
    G->vertexNum=n, G->edgeNum=m;
    for(int i=0; i<n; i++){
        G->adjlist[i].vertex=a[i];
        G->adjlist[i].first=NULL;
    }
    for(int i=0; i<m; i++){
        int x, y;
        scanf("%d%d", &x, &y);
        EdgeNode *s=(EdgeNode*)malloc(sizeof(EdgeNode));
        s->adjvex=y;
        s->next=G->adjlist[x].first;
        G->adjlist[x].first=s;
    }
}

图的销毁

cpp 复制代码
void DestroyGraph(ALGraph *G){
    for(int i=0; i<G->vertexNum; i++){
        EdgeNode *p, *q;
        p=q=G->adjlist[i].first;
        while(p != NULL){
            p=p->next;
            free(q);
            q=p;
        }
    }
}

深度优先遍历

cpp 复制代码
void dfs(ALGraph *G, int r){
    printf("%c ", G->adjlist[r].vertex);
    st[r]=1;

    EdgeNode *p=G->adjlist[r].first;
    while(p != NULL){
        int u=p->adjvex;
        if(st[u]==0) dfs(G, u);
        p=p->next;
    }
}

广度优先遍历

cpp 复制代码
void bfs(ALGraph *G, int r){
    int Q[MaxSize];
    int front=-1, rear=-1;
    printf("%c ", G->adjlist[r].vertex);
    st[r]=1; Q[++rear]=r;

    while(front != rear){
        int u=Q[front ++];
        EdgeNode *p=G->adjlist[u].first;
        while(p != NULL){
            int v=p->adjvex;
            if(st[v]==0){
                printf("%c ", G->adjlist[v].vertex);
                st[v]=1; Q[++rear]=v;
            }
            p=p->next;
        }
    }
}
相关推荐
三毛的二哥4 小时前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
南宫萧幕5 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
故事和你916 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅6 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头6 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者7 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
破浪前行·吴8 小时前
数据结构概述
数据结构·学习
py有趣8 小时前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒9 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表
啊哦呃咦唔鱼9 小时前
LeetCodehot100-394 字符串解码
算法