关于图的邻接矩阵深度优先遍历问题

我写的深度优先遍历,看了半天也没找出错误,但是就是不能成功运行出来。

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 32767
#define msize 20
#define T char
typedef struct Graph {
    int vertices;//最大顶点数
    int numver;//现有顶点数
    int numedg;//边数
    T *verlist;//顶点表
    int **edge;//矩阵表
    int weigth;//权值
    int *dis;//记录起点到顶点距离
    int *vis;//标记访问情况
    int* mark;//DFS标记
}Graph;

void inicial(Graph* g) {
    g->vertices = msize;
    g->numedg = g->numver =0;
    g->verlist = (T*)malloc(sizeof(T) * (g->vertices));
    g->edge = (int**)malloc(sizeof(int*) * g->vertices);
    g->dis = (int*)malloc(sizeof(int) * g->vertices);
    g->vis = (int*)malloc(sizeof(int) * g->vertices);
    g->mark = (int*)malloc(sizeof(int) * g->vertices);
    for (int i = 0; i < g->vertices; ++i) {
        g->edge[i] = (int*)malloc(sizeof(int) * g->vertices);
    }
    for (int i = 0; i < g->vertices; i++) {
        for (int j = 0; j < g->vertices; ++j) {
            g->edge[i][j] = MAX;
            if (i == j)
                g->edge[i][j] = 0;
                
        }
    }
    for (int i = 0; i < g->numver; i++) {
        g->mark[i] = false;
    }
}
int getarray(Graph* g, T v) {
    for (int i = 0; i < g->numver; ++i) {
        if (g->verlist[i] == v)
            return i;
    }
    return -1;
}
void addver(Graph* g, T v) {
    if (g->numver >= g->vertices)
        return;
    g->verlist[g->numver++] = v;
}
void addedg(Graph* g, T v1, T v2, int weight) {
    int p1 = getarray(g, v1);
    int p2 = getarray(g, v2);
    if (p1 == -1 || p2 == -1)
        return;
    if (g->edge[p1][p2]!=32767) 
        return;
    g->edge[p1][p2] = g->edge[p2][p1] = weight;
    g->numedg++;
}
void show(Graph* g) {
    for (int i = 0; i < g->numver; ++i) {
        printf("%c   ", g->verlist[i]);
    }
    printf("\n");
    for (int i = 0; i < g->numver; i++) {
        printf("%c  ", g->verlist[i]);
        for (int j = 0; j < g->numver; j++) {
            if(g->edge[i][j]==32767)
                printf("∞  ");
            else {
                printf("%d  ", g->edge[i][j]);
            }
            
        }
        printf("\n");
    }
    printf("\n");
}
void DFS(Graph *g,int ver) {
    //int p1 = getarray(g, ver);
    printf("%c\t", g->verlist[ver]);
    printf("%d", g->numver);
    //g->mark[ver] = 1;
    for (int i = 0; i < g->numver; i++) {
        if (g->edge[ver][i] != 0 && g->edge[ver][i]!=MAX&& !g->mark[i]) {
            g->mark[i] = true;
            DFS(g, i);
        }
    }

}
void Dijkstra(Graph* g, T start, T end) {
    int p;//下一个点的下标
    int p1 = getarray(g, start);
    int p2 = getarray(g, end);
    
    for (int i = 0; i < g->numver; i++) {
        g->vis[i] = 0;
        g->dis[i] = g->edge[p1][i];
    }
    g->vis[p1] = 1;//标记源点
    for (int k = 0; k < g->numver; k++) {
        int min = 100;
        for (int i = 0; i < g->numver; i++) {
            if (g->vis[i] == 0 && MAX > g->dis[i]) {
                min = MAX;
                p = i;
            
            }
        }
        g->vis[p] = 1;
        for (int i = 0; i < g->numver; i++) {
            if (!g->vis[i] && g->dis[i] > g->dis[p] + g->edge[p][i]) {
                g->dis[i] = g->dis[p] + g->edge[p][i];
            }
        }
    }
    //printf("%c", g->verlist[p2]);
    printf("%d", g->dis[p2]);
}
int main() {
    Graph G;
    inicial(&G);
    addver(&G,'a');
    addver(&G, 'b');
    addver(&G, 'c');
    addver(&G, 'd');
    addver(&G, 'e');
    addedg(&G, 'a', 'b', 10);
    addedg(&G, 'a', 'd', 5);
    addedg(&G, 'b', 'd', 3);
    addedg(&G, 'c', 'e', 9);
    addedg(&G, 'a', 'c', 4);
    show(&G);
    addver(&G, 'f');
    addedg(&G, 'd', 'f', 7);
    printf("--------");
    printf("\n");
    show(&G);
    Dijkstra(&G, 'a', 'b');
    Dijkstra(&G, 'b', 'c');
    printf("--------");
    G.mark[1] = true;
    DFS(&G,1);
}

希望各位能帮我看看哪里出错了,并帮我解决一下,还有就是能否告知一下,如果用我定义的图怎么实现广度优先遍历。

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。