首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无向图邻接表的C语言实现

无向图邻接表是一种常用的图的表示方法,它通过使用数组和链表的结合来表示图中的顶点和边。下面是无向图邻接表的C语言实现示例:

代码语言:c
复制
#include <stdio.h>
#include <stdlib.h>

// 邻接表中的节点
typedef struct Node {
    int vertex;             // 顶点编号
    struct Node* next;      // 指向下一个节点的指针
} Node;

// 图的邻接表
typedef struct Graph {
    int numVertices;        // 图中顶点的数量
    Node** adjLists;        // 存储邻接表的数组
} Graph;

// 创建一个新的节点
Node* createNode(int v) {
    Node* newNode = malloc(sizeof(Node));
    newNode->vertex = v;
    newNode->next = NULL;
    return newNode;
}

// 创建一个图
Graph* createGraph(int vertices) {
    Graph* graph = malloc(sizeof(Graph));
    graph->numVertices = vertices;

    // 创建存储邻接表的数组
    graph->adjLists = malloc(vertices * sizeof(Node*));

    // 初始化数组为空
    for (int i = 0; i < vertices; i++) {
        graph->adjLists[i] = NULL;
    }

    return graph;
}

// 添加边
void addEdge(Graph* graph, int src, int dest) {
    // 添加从源顶点到目标顶点的边
    Node* newNode = createNode(dest);
    newNode->next = graph->adjLists[src];
    graph->adjLists[src] = newNode;

    // 添加从目标顶点到源顶点的边(因为是无向图)
    newNode = createNode(src);
    newNode->next = graph->adjLists[dest];
    graph->adjLists[dest] = newNode;
}

// 打印邻接表表示的图
void printGraph(Graph* graph) {
    for (int i = 0; i < graph->numVertices; i++) {
        Node* temp = graph->adjLists[i];
        printf("顶点 %d 的邻接表:", i);
        while (temp) {
            printf(" -> %d", temp->vertex);
            temp = temp->next;
        }
        printf("\n");
    }
}

int main() {
    int vertices = 5;
    Graph* graph = createGraph(vertices);

    addEdge(graph, 0, 1);
    addEdge(graph, 0, 4);
    addEdge(graph, 1, 2);
    addEdge(graph, 1, 3);
    addEdge(graph, 1, 4);
    addEdge(graph, 2, 3);
    addEdge(graph, 3, 4);

    printGraph(graph);

    return 0;
}

这段代码实现了无向图邻接表的创建、添加边和打印邻接表的功能。通过创建一个包含顶点数量和邻接表数组的结构体,可以方便地表示和操作无向图的邻接表。

对于无向图邻接表的C语言实现,我们推荐使用腾讯云的云服务器(CVM)来运行和部署这段代码。腾讯云的云服务器提供了高性能、稳定可靠的计算资源,适合用于运行各种应用程序和服务。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

腾讯云云服务器(CVM)产品介绍:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券