求解决!为什么输入的数据元素是三个以上的字母就不行了呀


#include<cstdio>
#include<cstdlib>
#include<string>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INF 327676//最大值,即正无穷大
#define MaxSize 100//最大顶点数
#define queuesize 100
using namespace std;
typedef char Elemtype;//假设顶点数据类型为字符型
typedef int ArcType; //假设边的权值为整型
typedef struct edgenode
{
    int adjvex;//存放邻接的点在顶点表的下标,邻接点
    struct edgenode *next;//指向Vi下一个邻接点的边结点
    int weight;//权值
}edgenode;//边结点的类型定义
 typedef struct vexnode
 {
     Elemtype data; //存储顶点的名称或其相关信息
     edgenode *firstedge;//边表头指针
}vexnode; //顶点结点类型定义
typedef struct
{
   vexnode vexlist[MaxSize];//顶点表
   int n,e;//顶点数和边数
}ALGraph;//图的邻接表数据类型
typedef struct
{
    Elemtype vex[MaxSize];//顶点表
    int arc[MaxSize][MaxSize];//邻接矩阵
    int n,e;
}MGraph;//图的邻接矩阵数据类型
//循环队列存储结构定义
typedef struct  cirqueue
{
    Elemtype  *data;      //队列存储空间的首地址
    int front;         //队头位置:指向当前队头元素
    int rear;    //队尾位置:指向当前队尾元素的下一位置
}cirqueue;             // 循环队列
//构造空队,如果成功,返回1,如果失败,返回0
int initqueue(cirqueue *q)
{
    q->data=(Elemtype *)malloc(queuesize*sizeof(cirqueue));
    if(q->data==NULL)
        return 0; // 存储分配失败
    q->front=q->rear=0;
    return 1;
}
// 插入元素e为Q的新的队尾元素 ,如果成功,返回1,如果失败,返回0
int enqueue (cirqueue *q,Elemtype e)
{
    if ((q->rear+1)%queuesize==q->front)
        return 0; //队列满
    q->data[q->rear]=e;
    q->rear=(q->rear+1)%queuesize; //队尾后移一位
    return 1;
}
//若队列不空,则删除Q的队头元素,用e返回其值,并返回1;否则返回0
int dequeue (cirqueue *q,int *e)
{
    if (q->front == q->rear)
        return 0; //队列为空
    *e = q->data[q->front];
    q->front =(q->front+1)%queuesize; //队头后移一位
    return 1;
}
//若栈不空,则用e返回队头元素,并返回1;否则返回0
int getfront(cirqueue q,Elemtype *e)
{
    if (q.front == q.rear)
        return 0; //队列为空
    *e=q.data[q.front];
    return  1;
}
//若队列为空栈,则返回1,否则返回0
int queueempty(cirqueue q)//栈非空
{
    if(q.front == q.rear)
        return 1; //队列为空
    else return 0;
}
//返回队列的元素个数,即队列的长度
int queuelength(cirqueue q)
{
    return (q.rear-q.front+queuesize)%queuesize;
}
//邻接表
int locatevex_1(ALGraph g,Elemtype v)//在图中查找顶点v,存在顶点数组中的下标,不存在返回-1
{
    int i;
    for(i=0;i<g.n;i++)
        if(g.vexlist[i].data==v)return i;
    return -1;
}//邻接表
void printDG_1(ALGraph g)//打印邻接表有向图和无向图数据类型
{
    int i;
    edgenode *p;
    printf("图的邻接表表示:\n");
    for(i=0;i<g.n;i++){
        printf("%d%4c",i,g.vexlist[i].data);
        p=g.vexlist[i].firstedge;
        while(p!=NULL){
             printf("-->%d",p->adjvex);
             p=p->next;
        }
        printf("\n");
    }
}
void printDN_1(ALGraph g)//打印邻接表有向网和无向网数据类型
{
    int i;
    edgenode *p;
    printf("图的邻接表表示:\n");
    for(i=0;i<g.n;i++){
        printf("%d",i);
        printf("%4c",g.vexlist[i].data);
        p=g.vexlist[i].firstedge;
        while(p!=NULL){
                    printf("-->%d(权值:%d)",p->adjvex,p->weight);
                    p=p->next;
        }
        printf("\n");
    }
}
void CreateDG_1(ALGraph *g)//邻接表存储有向图
{
    int i,j,k;
    Elemtype v1,v2;
    edgenode *s;
    printf("请输入图的顶点数及边数:\n");
    printf("顶点数:n=");
    scanf("%d",&g->n);
    printf("边  数:e=");
    scanf("%d",&g->e);
    printf("请输入图的顶点信息(需要用空格隔开):\n");
    getchar();
    for(i=0;i<=g->n;i++){
        scanf("%c",&g->vexlist[i].data); //构造顶点信息
        g->vexlist[i].firstedge=NULL;
    }
    printf("请输入图的边的信息(需要用空格隔开):\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点下标(需要用空格隔开):",k+1);
        scanf(" %c %c",&v1,&v2);getchar();//输入一条边的两个顶点
        i=locatevex_1(*g,v1);
        j=locatevex_1(*g,v2);
        if(i>=0&&j>=0){
            s=(edgenode *)malloc(sizeof(edgenode));
            s->adjvex=j;
            s->next=g->vexlist[i].firstedge;
            g->vexlist[i].firstedge=s;
        }
    }
}
void CreateDN_1(ALGraph *g)//邻接表存储带权有向网
{
    int i,j,k,w;
    Elemtype v1,v2;
    edgenode *s;
    printf("请输入图的顶点数及边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息(需要用空格隔开):\n");getchar();
    for(i=0;i<=g->n;i++){
        scanf("%c",&g->vexlist[i].data); //构造顶点信息
        g->vexlist[i].firstedge=NULL;
    }
    printf("请输入图的边的信息:\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点下标和权值(需要用空格隔开):",k+1);
        scanf(" %c %c %d",&v1,&v2,&w);getchar();//输入一条边的两个顶点及权值
        i=locatevex_1(*g,v1);
        j=locatevex_1(*g,v2);
        if(i>=0&&j>=0){
            s=(edgenode *)malloc(sizeof(edgenode));
            s->adjvex=j;
            s->weight=w;
            s->next=g->vexlist[i].firstedge;
            g->vexlist[i].firstedge=s;
        }
    }
}
void CreateUDG_1(ALGraph *g)//邻接表存储无向图
{
    int i,j,k;
    Elemtype v1,v2;
    edgenode *s;
    printf("请输入图的顶点数及边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息(需要用空格隔开):\n");
    getchar();
    for(i=0;i<=g->n;i++){
        scanf("%c",&g->vexlist[i].data); //构造顶点信息
        g->vexlist[i].firstedge=NULL;
    }
    printf("请输入图的边的信息(需要用空格隔开):\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点下标(需要用空格隔开):",k+1);
        scanf(" %c %c",&v1,&v2);//输入一条边的两个顶点
        getchar();
        i=locatevex_1(*g,v1);
        j=locatevex_1(*g,v2);
        if(i>=0&&j>=0){
        s=(edgenode *)malloc(sizeof(edgenode));
        s->adjvex=j;
        s->next=g->vexlist[i].firstedge;
        g->vexlist[i].firstedge=s;
        s=(edgenode *)malloc(sizeof(edgenode));
        s->adjvex=i;
        s->next=g->vexlist[j].firstedge;
        g->vexlist[j].firstedge=s;
        }
    }
}
void CreateUDN_1(ALGraph *g)//邻接表存储带权无向网
{
    int i,j,k,w;
    Elemtype v1,v2;
    edgenode *s;
    printf("请输入图的顶点数及边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息:\n");
    getchar();
    for(i=0;i<=g->n;i++){
        scanf("%c",&g->vexlist[i].data); //构造顶点信息
        g->vexlist[i].firstedge=NULL;
    }
    printf("请输入图的边的信息(需要用空格隔开):\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点下标和权值(需要用空格隔开):",k+1);
        scanf(" %c %c %d",&v1,&v2,&w);//输入一条边的两个顶点和权值
        getchar();
        i=locatevex_1(*g,v1);
        j=locatevex_1(*g,v2);
        if(i>=0&&j>=0){
        s=(edgenode *)malloc(sizeof(edgenode));
        s->adjvex=j;
        s->weight=w;
        s->next=g->vexlist[i].firstedge;
        g->vexlist[i].firstedge=s;
        s=(edgenode *)malloc(sizeof(edgenode));
        s->adjvex=i;
        s->weight=w;
        s->next=g->vexlist[j].firstedge;
        g->vexlist[j].firstedge=s;
        }
    }
}
int visited[MaxSize];//访问标志数组
void DFS_1(ALGraph g,int i)//从第i个顶点出发递归地深度优先遍历图
{
    edgenode *p;
    printf("%3c",g.vexlist[i].data);//访问第i个项点
    visited[i]=1;
    p=g.vexlist[i].firstedge;
    while(p!=NULL)
    {
        if(visited[p->adjvex]==0)
        DFS_1(g,p->adjvex);//对i的尚未访问的邻接顶点j递归调用DFS
        p=p->next;
    }
}
void DFStraverse_1(ALGraph g) //对图G进行深度优先遍历
{
    int v;
    for (v=0; v<g.n;v++)visited[v]=0; //初始化标志数组
    for  (v=0; v<g.n;v++) //保证非连通图的遍历
//从第v个顶点出发递归地深度优先遍历图G
        if (!visited[v])DFS_1(g,v);
}
int BFSvisited[MaxSize];//利用邻接矩阵实现连通图的广度优先搜索遍历
//从第k个顶点出发广度优先遍历图G,G以邻接矩阵表示。
void BFS_1(ALGraph g,int k){
    int i;
    cirqueue q;
    edgenode *p;
    initqueue(&q);//初始化队列
    printf("%3c",g.vexlist[k].data);//访问第k个项点
    visited[k]=1;
    enqueue(&q,k);//第k个顶点进队
    while(queueempty(q)==0) {//队列非空
        dequeue(&q,&i);
        p=g.vexlist[i].firstedge;//获取第1个邻接点
        while(p!=NULL){
            if(visited[p->adjvex]==0){
                //访问第i个顶点的末曾访问的顶点
                printf("%3c",g.vexlist[p->adjvex].data);
                visited[p->adjvex]=1;
                enqueue(&q,p->adjvex);//第k个顶点进队
            }
            p=p->next;
        }
    }
}
void BFStraverse_1(ALGraph g) //对图进行广度优先遍历
{
    int v;
    for (v=0; v<g.n;v++) //初始化标志数组
        visited[v]=0;
    for  (v=0; v<g.n;v++) //保证非连通图的遍历
        if (!visited[v])BFS_1(g,v);
       //从第v个顶点出发递归地深度优先遍历图
}
//邻接矩阵
int locatevex_2(MGraph g,Elemtype v)//在图中查找顶点v,存在顶点数组中的下标,不存在返回-1
{
    int i;
    for(i=0;i<g.n;i++)
        if(g.vex[i]==v)return i;
    return -1;
}//邻接矩阵
void printDG_2(MGraph g)//打印邻接矩阵有向图和无向图数据类型
{
    int i,j;
    printf("图的邻接矩阵表示:\n");
    for(i=0;i<g.n;i++){
        for(j=0;j<g.n;j++){
            printf("%3d",g.arc[i][j]);
        }
        printf("\n");
    }
}
void printDN_2(MGraph g)//打印邻接矩阵有向网和无向网数据类型
{
    int i,j;
    printf("图的邻接矩阵表示:\n");
    for(i=0;i<g.n;i++)
    {
        for(j=0;j<g.n;j++)
        {
            if(g.arc[i][j]!=INF)
            {
              printf("%3d",g.arc[i][j]);
            }
            else if(g.arc[i][j]==INF)
              {
                  printf("∞");
              }
        }
        printf("\n");
    }
}
void CreateUDG_2(MGraph *g)//邻接矩阵存储无向图
{
    int i,j,k;
    Elemtype v1,v2;
    printf("请输入顶点数和边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息(需要用空格隔开):\n");
    getchar();
    for(i=0;i<=g->n;i++)
    scanf(" %c",&g->vex[i]);
    for(i=0;i<g->n;i++)
        for(j=0;j<g->n;j++)
            g->arc[i][j]=0;//初始化邻接矩阵
    printf("请输入图的边的信息:\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点(需要用空格隔开):",k+1);
        scanf(" %c %c",&v1,&v2);
        fflush(stdin);//清空输入缓冲区
        i=locatevex_2(*g,v1);
        j=locatevex_2(*g,v2);
        if(i>=0&&j>=0){
        g->arc[i][j]=1;
        g->arc[j][i]=1;//无向图矩阵对称
        }
    }
}
void CreateDG_2(MGraph *g)//邻接矩阵存储有向图
{
    int i,j,k;
    Elemtype v1,v2;
    printf("请输入顶点数和边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息:\n");
    getchar();
    for(i=0;i<=g->n;i++)
      scanf("%c",&g->vex[i]);
    fflush(stdin);//清空输入缓冲区
    for(i=0;i<g->n;i++)
        for(j=0;j<g->n;j++)
            g->arc[i][j]=0;//初始化邻接矩阵
    printf("请输入图的边的信息(需要用空格隔开):\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点(需要用空格隔开):",k+1);
        scanf(" %c %c",&v1,&v2);
        fflush(stdin);//清空输入缓冲区
        i=locatevex_2(*g,v1);
        j=locatevex_2(*g,v2);
        if(i>=0&&j>=0){
        g->arc[i][j]=1;
        }
    }
}
void CreateDN_2(MGraph *g)//邻接矩阵存储有权有向网
{
    int i,j,k,w;
    Elemtype v1,v2;
    printf("请输入顶点数和边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息:\n");
    getchar();
    for(i=0;i<=g->n;i++)
    scanf("%c",&g->vex[i]);
    for(i=0;i<g->n;i++)
        for(j=0;j<g->n;j++)
            g->arc[i][j]=INF;//初始化邻接矩阵
    printf("请输入图的边的信息(需要用空格隔开):\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点和权值(需要用空格隔开):",k+1);
        scanf(" %c %c %d",&v1,&v2,&w);
        fflush(stdin);//清空输入缓冲区
        i=locatevex_2(*g,v1);
        j=locatevex_2(*g,v2);
        if(i>=0&&j>=0)
        {
                g->arc[i][j]=w;
        }
    }
}
void CreateUDN_2(MGraph *g)//邻接矩阵存储有权无向网
{
    int i,j,k,w;
    Elemtype v1,v2;
    printf("请输入顶点数和边数:\n");
    printf("顶点数:n=");scanf("%d",&g->n);
    printf("边  数:e=");scanf("%d",&g->e);
    printf("请输入图的顶点信息:\n");
    getchar();
    for(i=0;i<=g->n;i++)
    scanf("%c",&g->vex[i]);
    for(i=0;i<g->n;i++)
        for(j=0;j<g->n;j++)
            g->arc[i][j]=INF;//初始化邻接矩阵
    printf("请输入图的边的信息:\n");
    for(k=0;k<g->e;k++)
    {
        printf("请输入第%d条边的两个端点和权值(需要用空格隔开):",k+1);
        scanf(" %c %c %d",&v1,&v2,&w);//输入边及边上的权值
        fflush(stdin);//清空输入缓冲区
        i=locatevex_2(*g,v1);
        j=locatevex_2(*g,v2);
        if(i>=0&&j>=0){
            g->arc[i][j]=w;
            g->arc[j][i]=g->arc[i][j];
        }
    }
}
int DFSvisited[MaxSize];//访问标志数组
void DFS_2(MGraph g,int i)
{
    int j;
    printf("%3c",g.vex[i]); //访问第i个项点
    DFSvisited[i]=1;
    for(j=0;j<g.n;j++)
    {
        if((g.arc[i][j]==1)&&(DFSvisited[j]==0))
            DFS_2(g,j);//对i的尚未访问的邻接顶点j递归调用DFS
    }
}
//对图进行深度优先遍历
void DFStraverse_2(MGraph g)
{
    int v;
    for (v=0; v<g.n;v++)
        DFSvisited[v]=0; //初始化标志数组
    for (v=0; v<g.n;v++) //保证非连通图的遍历,连通图只执行一次
//从第v个顶点出发递归地深度优先遍历图G
        if (!DFSvisited[v]) DFS_2(g,v);
}
//从第k个顶点出发广度优先遍历图G,G以邻接矩阵表示。
void BFS_2(MGraph g,int i){
    int j;
    cirqueue q;
    initqueue(&q);//初始化队列
    printf("%3c",g.vex[i]);//访问第k个顶点
    BFSvisited[i]=1;
    enqueue(&q,i);//第k个顶点进队
    while(queueempty(q)==0) {//队列非空
        dequeue(&q,&i);
        for(j=0;j<g.n;j++){
           if((g.arc[i][j]==1)&&(BFSvisited[j]==0)){
//访问第i个顶点的末曾访问的顶点j
                printf("%3c",g.vex[j]);
                BFSvisited[j]=1;
                enqueue(&q,j);//第k个顶点进队
            }
        }
    }
}
//对图进行广度优先遍历
void BFStraverse_2(MGraph g) //对图进行广度优先遍历
{
    int v;
    for (v=0; v<g.n;v++) //初始化标志数组
        BFSvisited[v]=0;
    for  (v=0; v<g.n;v++) //保证非连通图的遍历
        if (!BFSvisited[v])BFS_2(g,v);
       //从第v个顶点出发递归地广度优先遍历图
}
//有向网,无向网转换
void MatToList(MGraph g,ALGraph *G)//邻接矩阵转换为邻接表
{
    int i,j,l;
    edgenode *p;
    G->n=g.n;
    G->e=g.e;
    for(l=0;l<g.n;l++)
        G->vexlist[l].data=g.vex[l];
    for(i=0; i<g.n; i++)
        G->vexlist[i].firstedge=NULL;
    for(i=0;i<g.n; i++)
    {
        for(j=g.e-1;j>=0;j--)
        {
            if(g.arc[i][j]!=0&&g.arc[i][j]!=INF)
            {
                p=(edgenode*)malloc(sizeof(edgenode));
                p->adjvex=j;
                p->weight=g.arc[i][j];
                p->next=G->vexlist[i].firstedge;
                G->vexlist[i].firstedge=p;
            }
        }
    }
}
void ListToMat(ALGraph *T,MGraph &S)//邻接表转换成邻接矩阵
{
    int i,l,j;
    edgenode *p;
        for(l=0;l<S.n;l++)
    {
        for(j=0;j<S.n;j++)
        {
            S.arc[l][j]=0;
        }
    }
    for(i=0;i<T->n; i++)
    {
        p=T->vexlist[i].firstedge;
        while(p!=NULL)
        {
            S.arc[i][p->adjvex]=p->weight;
            p=p->next;
        }
    }
    S.n=T->n;
    S.e=T->e;
}
//有向图、无向图转换
void MatToList_2(MGraph E,ALGraph *F)//将邻接矩阵转换成邻接表
{
    int i,j,l;
    edgenode *p;
    for(l=0;l<E.n;l++)
        F->vexlist[l].data=E.vex[l];
    for(i=0;i<E.n;i++)//给邻接表中所有头节点的指针域置初值
        F->vexlist[i].firstedge=NULL;
    for (i=0; i<E.n; i++) //检查邻接矩阵中每个元素
        for (j=E.n-1;j>=0;j--)
            if (E.arc[i][j]!=0)//存在一条边
            {
                 p=(edgenode*)malloc(sizeof(edgenode));//创建一个节点*p
                p->adjvex=j;
                p->next=F->vexlist[i].firstedge;//采用头插法插入*p
                F->vexlist[i].firstedge=p;
            }
    F->n=E.n;
    F->e=E.e;
}
void ListToMat_2(ALGraph *L,MGraph &M)//将邻接表转换成邻接矩阵
{
    int i;
    edgenode *p;
    for(i=0;i<L->n;i++)
    {
        p=L->vexlist[i].firstedge;
        while (p!=NULL)
        {
            M.arc[i][p->adjvex]=1;
            p=p->next;
        }
    }
    M.n=L->n;
    M.e=L->e;
}
//邻接表的销毁
void Destory_1(ALGraph *lg){
    int i;
    edgenode *p,*q;
    for(i=0;i<lg->n;i++){
        p = lg->vexlist[i].firstedge; //指针p指向顶点i的单链表的第一个边结点
        if(p!=NULL)
        {
            q=p->next;
            while(q!=NULL)
            {
                free(p);
                p=q;
                q=q->next;
            }
            free(p);
        }
    }
    free(lg);
}
//邻接矩阵的销毁
void Destory_2(MGraph &g)
{
    int i,k,j;
    for(k=0;k<MaxSize;k++)
        g.vex[k]=0;
    for(i=0;i<g.n;i++)
        for(j=0;j<g.n;j++)
        {
            g.arc[i][j]=0;
        }
        g.e=0;
        g.n=0;
}
void menu()
{
    printf("*********************菜单*********************\n");
    printf("**1.邻接表存储有向图    2.邻接矩阵存储有向图**\n");
    printf("**3.邻接表存储无向图    4.邻接矩阵存储无向图**\n");
    printf("**5.邻接表存储有向网    6.邻接矩阵存储有向网**\n");
    printf("**7.邻接表存储无向网    8.邻接矩阵存储无向网**\n");
    printf("**********************************************\n");
    printf("请选择>:");
}
int main()
{
    printf("\n");
    printf("\t\t图的存储及相互转换\t\t\t\t\t\t\t\n");
    printf(" \n");
    int input=0;
    ALGraph G;
    MGraph H;
    do
    {
        menu();
        scanf("%d",&input);//输入选择
        switch(input)
        {
        case 1:
             CreateDG_1(&G);
             printDG_1(G);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_1(G);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_1(G);
             printf("\n");
             printf("图G的邻接表转换成邻接矩阵:\n");
             ListToMat_2(&G,H);
             printDG_2(H);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
        case 2:
             CreateDG_2(&H);
             printDG_2(H);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_2(H);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_2(H);
             printf("\n");
             printf("图G的邻接矩阵转换成邻接表:\n");
             MatToList_2(H,&G);
             printDG_1(G);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
        case 3:
             CreateUDG_1(&G);
             printDG_1(G);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_1(G);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_1(G);
             printf("\n");
             printf("图G的邻接表转换成邻接矩阵:\n");
             ListToMat_2(&G,H);
             printDG_2(H);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
       case 4:
             CreateUDG_2(&H);
             printDG_2(H);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_2(H);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_2(H);
             printf("\n");
             printf("图G的邻接矩阵转换成邻接表:\n");
             MatToList_2(H,&G);
             printDG_1(G);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
        case 5:
             CreateDN_1(&G);
             printDN_1(G);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_1(G);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_1(G);
             printf("\n");
             printf("图G的邻接表转换成邻接矩阵:\n");
             ListToMat(&G,H);
             printDG_2(H);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
        case 6:
             CreateDN_2(&H);
             printDN_2(H);
             printf("\n");
             printf("深度优先遍历输出数据元素:\n");
             DFStraverse_2(H);
             printf("\n");
             printf("广度优先遍历输出数据元素:\n");
             BFStraverse_2(H);
             printf("\n");
             printf("图G的邻接矩阵转换成邻接表:\n");
             MatToList(H,&G);
             printDN_1(G);
             printf("\n");
             Destory_1(&G);
             Destory_2(H);
             break;
        case 7:
            CreateUDN_1(&G);
            printDN_1(G);
            printf("\n");
            printf("深度优先遍历输出数据元素:\n");
            DFStraverse_1(G);
            printf("\n");
            printf("广度优先遍历序列输出数据元素:\n");
            BFStraverse_1(G);
            printf("图G的邻接表转换成邻接矩阵:\n");
            ListToMat(&G,H);
            printDG_2(H);
            printf("\n");
            Destory_1(&G);
            Destory_2(H);
            break;
       case 8:
            CreateUDN_2(&H);
            printDG_2(H);
            printf("\n");
            printf("深度优先遍历输出数据元素:\n");
            DFStraverse_2(H);
            printf("\n");
            printf("广度优先遍历输出数据元素:\n");
            BFStraverse_2(H);[]()
            printf("\n");
            MatToList(H,&G);
            printDN_1(G);
            printf("\n");
            Destory_1(&G);
            Destory_2(H);
            break;
        default:
            return ERROR;
        }
    }while(input);
    return 0;
}


800行代码啊,至少得具体一点吧