6-118 图的创建-邻接表

本题要求建立一个无向图,采用邻接表做为存储结构。
例如

6-118 图的创建-邻接表_第1张图片

函数接口定义:

在这里描述函数接口。例如:
int locate(ALGraph G,char v);//求顶点v的下标
void CreatMGraph(ALGraph &G);//创建图G

G 是图,采用邻接表存储结构, v 为顶点的值。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#include
#include
#define MVNum 100                                 //最大顶点数
typedef struct ArcNode{                        //表结点
    int adjvex;                                    //邻接点的位置
    struct ArcNode *nextarc;      //指向下一个表结点的指针
  }ArcNode;
typedef struct VNode{
   char data;                                    //顶点信息
   ArcNode *firstarc;         //指向第一个表结点的指针
}VNode, AdjList[MVNum];                 //AdjList表示邻接表类型
typedef struct{
    AdjList vertices;              //头结点数组
    int vexnum, arcnum;     //图的当前顶点数和边数
}ALGraph;
void CreatMGraph(ALGraph &G);/* 创建图 */
void printGraph(ALGraph G);/*输出图 */
int main()
{
    ALGraph G;
    CreatMGraph(G);
    printGraph(G);
    return 0;
}

void printGraph(ALGraph G)
{
    int i;
    ArcNode *p;
    for(i=0;i     {
       printf("%c:",G.vertices[i].data);
       for(p=G.vertices[i].firstarc;p;p=p->nextarc)
           printf(" %c",G.vertices[p->adjvex].data);
       printf("\n");
    }
}

/* 请在这里填写答案 */

输入信息为:第一行给出图的顶点数n和边数e。第二行给出n个字符,表示n个顶点的数据元素的值。后面是e行,给出每一条边的两个顶点的值(顶点之间无空格)。

输出每个顶点的值以及各顶点的邻接点的值。

输入样例:

7 9
0123456
02
03
04
13
15
23
25
45
56

输出样例:

0: 4 3 2
1: 5 3
2: 5 3 0
3: 2 1 0
4: 5 0
5: 6 4 2 1
6: 5

 

 int locate(ALGraph G, char v) {
    for (int i = 0; i < G.vexnum; i++) {
        if (G.vertices[i].data == v) {
            return i;
        }
    }
    return -1; // 未找到
}

void CreatMGraph(ALGraph &G) {
    scanf("%d %d", &G.vexnum, &G.arcnum);

    for (int i = 0; i < G.vexnum; i++) {
        for (int j = 0; j < G.vexnum; j++) {
            G.vertices[i].firstarc = NULL; // 初始化邻接表为空
        }
    }

    for (int i = 0; i < G.vexnum; i++) {
        scanf(" %c", &G.vertices[i].data);
    }

    for (int i = 0; i < G.arcnum; i++) {
        char v1, v2;
        scanf(" %c%c", &v1, &v2);
        int loc1 = locate(G, v1);
        int loc2 = locate(G, v2);

        ArcNode *node = (ArcNode *)malloc(sizeof(ArcNode));
        node->adjvex = loc2;
        node->nextarc = G.vertices[loc1].firstarc;
        G.vertices[loc1].firstarc = node;

        node = (ArcNode *)malloc(sizeof(ArcNode));
        node->adjvex = loc1;
        node->nextarc = G.vertices[loc2].firstarc;
        G.vertices[loc2].firstarc = node;
    }
}

你可能感兴趣的:(图论,算法,数据结构)