byCode1024 2021-10-09 19:14 采纳率: 25%
浏览 55
已结题

采用邻接矩阵表示法创建无向网,在查询顶点在图中的位置,总是查找不对


#include <stdio.h>
#include <malloc.h>
#define MaxInt 32767
#define MVNum 100
typedef char VerTexType; //假设顶点的数据类型为字符型
typedef int ArcType;     //假设边的权值类型为整型
typedef struct
{
    VerTexType vexs[MVNum];     //顶点表
    ArcType arcs[MVNum][MVNum]; //邻接矩阵
    int vexnum, arcnum;         //图当前点数和边树
} AMGraph;

int LocateVex(AMGraph *G, VerTexType v)
{
    int i, j;
    for (i = 0; i < G->vexnum; i++)
    {
        if (G->vexs[i] == v)
        {
            return i;
        }
    }
    return 1;
}

AMGraph *CreateUDN(AMGraph *G)
{ //采用邻接矩阵表示法,创建无向网G
    int i, j, k;
    int vexnum, arcnum; //总顶点数,总边数

    G = malloc(sizeof(AMGraph));

    printf("Please enter the total number of vertices:\n"); //输入总顶点数
    scanf("%d", &(G->vexnum));

    printf("Please enter an edge:\n"); //输入总边数
    scanf("%d", &(G->arcnum));

    for (i = 0; i < G->vexnum; i++) //依次输入点的信息
    {
        printf("Please enter NO.%d vertices value:\n", i + 1);
        scanf("%s", &(G->vexs[i]));
    }

    for (i = 0; i < G->vexnum; i++)
    { //初始化邻接矩阵,边的权值均置为极大值MaxInt
        for (int j = 0; j < G->vexnum; j++)
        {
            G->arcs[i][j] = MaxInt;
        }
    }

    for (k = 0; k < G->arcnum; k++)
    {
        VerTexType v1, v2; //顶点
        int w;             //权值
        //输入顶点
        printf("Please enter first vertex:\n");
        scanf("%s", &v1);

        printf("Please enter second vertex:\n");
        scanf("%s", &v2);

        //输入两个顶点之间的权值
        printf("Please enter the weight:\n");
        scanf("%d", &w);

        //确定v1和v2在G中的位置,即顶点数组的下标
        i = LocateVex(G, v1);
        j = LocateVex(G, v2);

        G->arcs[i][j] = w;             //边<v1,v2>的权值置为w
        G->arcs[j][i] = G->arcs[i][j]; //置<v1,v2>的对称边<v2,v1>的权值为w
    }
    return G;
}

int main()
{
    AMGraph *G;
    G = CreateUDN(G);
    int i, j;
    for (i = 0; i < G->vexnum; i++)
    {
        for (j = 0; j < G->vexnum; j++)
        {
            printf("%d\t", G->arcs[i][j]);
        }
        printf("\n");
    }
    return 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月17日
    • 创建了问题 10月9日

    悬赏问题

    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 TYPCE母转母,插入认方向
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?
    • ¥15 matlab(相关搜索:紧聚焦)
    • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
    • ¥15 路易威登官网 里边的参数逆向
    • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
    • ¥50 需求一个up主付费课程
    • ¥20 模型在y分布之外的数据上预测能力不好如何解决