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


#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;
}