您的当前位置:首页正文

7-11 邻接矩阵表示法创建无向图

来源:九壹网

采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度。

输入格式:

输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。

输出格式:

依次输出各顶点的度,行末没有最后的空格。

输入样例:

5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE

输出样例:

2 3 3 3 3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

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

#define MAX 10

int main()
{
    int i, j;
    int numver, numEdges;
    char ver[MAX + 1];
    int adj[MAX][MAX] = {0};
    int degrees[MAX] = {0};

    // 输入顶点数和边数
    scanf("%d %d", &numver, &numEdges);

    // 输入顶点信息
    scanf("%s", ver);

    // 构建邻接矩阵
    for (i = 0; i < numEdges; i++)
    {
        char u, v;
        scanf(" %c%c", &u, &v); // 注意前面的空格,用来跳过换行符
        int uIndex = strchr(ver, u) - ver;
        int vIndex = strchr(ver, v) - ver;
        adj[uIndex][vIndex] = 1;
        adj[vIndex][uIndex] = 1; // 因为是无向图
    }

    // 计算每个顶点的度
    for (i = 0; i < numver; i++)
    {
        for (j = 0; j < numver; j++)
        {
            if (adj[i][j] == 1)
            {
                degrees[i]++;
            }
        }
    }

    // 输出每个顶点的度
    for (i = 0; i < numver; i++)
    {
        if (i > 0)
        {
            printf(" ");
        }
        printf("%d", degrees[i]);
    }
    printf("\n");

    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top