为什么编译没错误运行不了想要的结果

#include"stdio.h"

#include"stdlib.h"

#define MAXVER 10

 int visited[MAXVER];

 int BFSvisited[MAXVER];

typedef char ElemType;

typedef struct node 

{int num; 

 struct node *next; 

 } slink;

 typedef struct

 {struct 

   {ElemType vertex;

    slink *first;

   }ve[MAXVER];

   int vex,edge,tag; 

 }adjlist;

 

 void cregraph(adjlist *G,int n,int m)

 {int i,e=0;slink *p,*q,*s;char x,y;

  G->vex=n;G->tag=m;

  for(i=0;i<n;i++)

    {G->ve[i].vertex=i+'A';G->ve[i].first=NULL;

  } 

  printf("输入边的或弧的两个顶点,空格结束\n");

  scanf("%c%c",&x,&y);

  while(x!=' '&&y!=' ')

   {e++;

    s=(slink *)malloc(sizeof(slink));

    s->num=y-'A';

    if(G->ve[x-'A'].first==NULL)

     {G->ve[x-'A'].first=s;

      s->next=NULL;

  }

  else

  {p=G->ve[x-'A'].first;

   if(p->num>s->num)

     {s->next=p;G->ve[x-'A'].first=s;

     }

     else

     {q=p->next;

      while(q!=NULL&&s->num>q->num)

           {p=q;q=q->next;

     }

     p->next=s;s->next=q;

     }

   } 

   if(!G->tag)

    {s=(slink *)malloc(sizeof(slink));

     s->num=x-'A';

     if(G->ve[y-'A'].first==NULL)

       {G->ve[y-'A'].first=s;

        s->next=NULL;

     } 

     else

     {p=G->ve[y-'A'].first;

     if(p->num>s->num)

       {s->next=p;

        G->ve[y-'A'].first=s;

    }

    else

    {q=p->next;

     while(q!=NULL&&s->num>q->num)

          {p=q;

           q=q->next;

        } 

    p->next=s;s->next=q;    

    }

     }

    }

    printf("输入边的或弧的两个顶点,空格结束\n");

    scanf("%c%c",&x,&y);

   }

   G->edge=e;

 }

  

 void dfs(adjlist *G,int v)//深度优先遍历

     {

     slink *p;

        printf("%3c",G->ve[v].vertex);

        visited[v]=1;

        p=G->ve[v].first;

        while(p)

         {if(!visited[p->num])

            dfs(G,p->num);

            p=p->next;

   }

    } 

 void dfsgraph(adjlist *G)

 {int i;

  for(i=0;i<G->vex;i++)

   if(!visited[i])

      dfs(G,i);

    } 

 

 

 void bfs(adjlist *G,int v)//广度优先遍历 

   { 

     int queue[MAXVER],front,rear,i;

    slink *p;

    front=rear=0;

    queue[rear++]=v;

    while(front!=rear)

         {v=queue[front++];

          printf("%c->",G->ve[v].vertex);BFSvisited[v]=1;

          p=G->ve[v].first;

          while(p!=NULL)

          {for(i=0;i<rear;i++)

              if(p->num==queue[i])break;

            if(i>=rear)

     queue[rear++]=p->num;

     p=p->next;  

    }

   }

   }

 void bfsgraph(adjlist *G)

  {int i;

   for(i=0;i<G->vex;i++)

     if(!BFSvisited[i])

     bfs(G,i);

  }

 

 int main()

   {adjlist G;

    int n,m;

 printf("输入图的顶点数和类型:\n"); 

 scanf("%d%d",&n,&m);

 cregraph(&G,n,m);

 printf("深度优先遍历的结果为:");

 dfs(&G,1);

 printf("\n");

 printf("广度优先遍历为:"); 

 bfs(&G,1);

 printf("\n"); 

   }

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

111

说明程序里面有逻辑错误,是哪一部分有问题呢?