学校地图管理功能。该功能使用图形结构进行数据存储,并实现基本初始化、增加、修改、删除、查找功能。

学校地图管理功能。该功能使用图形结构进行数据存储,并实现基本初始化、增加、修改、删除、查找功能。

给你一个简单一点的代码实现吧,下次细节你可以多说一点要求

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LEN 50
#define MAX_DESC_LEN 100
#define MAX_VERTEX_NUM 100

// 图形结构体
typedef struct {
    char name[MAX_NAME_LEN]; // 地点名称
    char desc[MAX_DESC_LEN]; // 地点描述
    int x, y; // 地点坐标
} Vertex;

typedef struct {
    int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
    Vertex vertex[MAX_VERTEX_NUM]; // 顶点数组
    int vertex_num; // 顶点数量
} Graph;

// 初始化图
void init_graph(Graph *graph) {
    graph->vertex_num = 0;
    memset(graph->edge, 0, sizeof(graph->edge));
    memset(graph->vertex, 0, sizeof(graph->vertex));
}

// 添加顶点
void add_vertex(Graph *graph, Vertex vertex) {
    if (graph->vertex_num >= MAX_VERTEX_NUM) {
        printf("顶点数量已达到最大值,无法添加新的顶点!\n");
        return;
    }
    graph->vertex[graph->vertex_num++] = vertex;
}

// 添加边
void add_edge(Graph *graph, int from, int to, int weight) {
    graph->edge[from][to] = weight;
}

// 修改顶点
void modify_vertex(Graph *graph, int index, Vertex vertex) {
    graph->vertex[index] = vertex;
}

// 删除顶点
void delete_vertex(Graph *graph, int index) {
    int i, j;
    // 删除顶点
    for (i = index; i < graph->vertex_num - 1; i++) {
        graph->vertex[i] = graph->vertex[i + 1];
    }
    graph->vertex_num--;
    // 删除边
    for (i = 0; i < graph->vertex_num; i++) {
        for (j = index; j < graph->vertex_num - 1; j++) {
            graph->edge[i][j] = graph->edge[i][j + 1];
        }
        graph->edge[i][graph->vertex_num - 1] = 0;
    }
    for (j = 0; j < graph->vertex_num; j++) {
        for (i = index; i < graph->vertex_num - 1; i++) {
            graph->edge[i][j] = graph->edge[i + 1][j];
        }
        graph->edge[graph->vertex_num - 1][j] = 0;
    }
}

// 查找顶点
int find_vertex(Graph *graph, char *name) {
    int i;
    for (i = 0; i < graph->vertex_num; i++) {
        if (strcmp(graph->vertex[i].name, name) == 0) {
            return i;
        }
    }
    return -1;
}

// 打印顶点
void print_vertex(Vertex vertex) {
    printf("名称:%s,描述:%s,坐标:(%d,%d)\n", vertex.name, vertex.desc, vertex.x, vertex.y);
}

// 打印图
void print_graph(Graph *graph) {
    int i, j;
    printf("图形结构:\n");
    for (i = 0; i < graph->vertex_num; i++) {
        print_vertex(graph->vertex[i]);
        for (j = 0; j < graph->vertex_num; j++) {
            if (graph->edge[i][j] != 0) {
                printf("从 %s 到 %s 的距离为:%d\n", graph->vertex[i].name, graph->vertex[j].name, graph->edge[i][j]);
            }
        }
        printf("\n");
    }
}

int main() {
    Graph graph;
    init_graph(&graph);

    // 添加顶点
    add_vertex(&graph, (Vertex){"教学楼", "这是教学楼", 10, 20});
    add_vertex(&graph, (Vertex){"实验楼", "这是实验楼", 30, 40});
    add_vertex(&graph, (Vertex){"图书馆", "这是图书馆", 50, 60});

    // 添加边
    add_edge(&graph, 0, 1, 100);
    add_edge(&graph, 0, 2, 200);
    add_edge(&graph, 1, 0, 100);
    add_edge(&graph, 1, 2, 300);
    add_edge(&graph, 2, 0, 200);
    add_edge(&graph, 2, 1, 300);

    // 打印图
    print_graph(&graph);

    // 修改顶点
    modify_vertex(&graph, 0, (Vertex){"教学楼A", "这是教学楼A", 11, 21});

    // 删除顶点
    delete_vertex(&graph, 1);

    // 查找顶点
    int index = find_vertex(&graph, "教学楼A");
    if (index != -1) {
        print_vertex(graph.vertex[index]);
    }

    // 打印图
    print_graph(&graph);

    return 0;
}