CH6_2.C
上传用户:lgb298
上传日期:2013-03-22
资源大小:1025k
文件大小:2k
源码类别:

软件工程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <alloc.h>
  3. #define M 10
  4. typedef struct node
  5. {   int adjvex;
  6.     struct node *next;
  7. }JD;
  8. typedef struct tnode
  9. {   int vexdata;
  10.     struct node *firstarc;
  11. }TD;
  12. void bfs(TD g[],int v,int visited[])
  13. {  int qu[M],f=0,r=0;
  14.    JD *p;
  15.    printf("%d  ",v);
  16.    visited[v]=1;
  17.    qu[0]=v;
  18.    while(f<=r)
  19.    {  v=qu[f++];
  20.       p=g[v].firstarc;
  21.       while(p!=NULL)
  22.       {  v=p->adjvex;
  23.  if(visited[v]==0)
  24.  {  visited[v]=1;
  25.     printf("%d  ",v);
  26.             qu[++r]=v;
  27.          }
  28.          p=p->next;
  29.       }
  30.     }
  31. }
  32. void traver(TD g[],int n)
  33. {  int i;
  34.    static int visited[M];
  35.    for(i=1;i<=n;i++)
  36.       visited[i]=0;
  37.    for(i=1;i<=n;i++)
  38.       if(visited[i]==0)
  39.  bfs(g,i,visited);
  40. }
  41. int loc_vertex(TD g[],int vex,int n)
  42. {   int i,j;
  43.     for(i=1;i<=n;i++)
  44.        if(g[i].vexdata==vex)
  45.    return(i);
  46.     return(0);
  47. }
  48. int crt_linklist(TD g[])
  49. {   int n,e,i,j,k,vt,vh,flag;
  50.     JD *p;
  51.     printf("Input flag and the number of node,arc:");
  52.     scanf("%d,%d,%d",&flag,&n,&e);
  53.     for(i=1;i<=n;i++)
  54.     {  printf("g[%d].vexdata=",i);
  55.        scanf("%d",&g[i].vexdata);
  56.        g[i].firstarc=NULL;
  57.     }
  58.     for(k=1;k<=e;k++)
  59.     {   printf("Vt,Vh:");
  60. scanf("%d,%d",&vt,&vh);
  61. i=loc_vertex(g,vt,n);
  62. j=loc_vertex(g,vh,n);
  63. if(flag)
  64. {   p=(JD *)malloc(sizeof(JD));
  65.     p->adjvex=j;
  66.     p->next=g[i].firstarc;
  67.     g[i].firstarc=p;
  68. }
  69. else
  70. {   p=(JD *)malloc(sizeof(JD));
  71.     p->adjvex=j;
  72.     p->next=g[i].firstarc;
  73.     g[i].firstarc=p;
  74.     p=(JD *)malloc(sizeof(JD));
  75.     p->adjvex=i;
  76.     p->next=g[j].firstarc;
  77.     g[j].firstarc=p;
  78. }
  79.     }
  80.     return(n);
  81. }
  82. void main()
  83. {  int n;
  84.    TD g[M];
  85.    n=crt_linklist(g);
  86.    traver(g,n);
  87. }