纯C语言:检索与周游广度深度遍历源码分享

2020-01-06 12:42:46于丽

//将元素x入队列sq的队尾,成功返回1,失败返回0

 if (sq->front==(sq->rear+1)%maxsize)
 {  
  printf("queue is full!n");
  return 0;
 }
 else
 {   
  sq->data[sq->rear]=x;
  sq->rear=(sq->rear+1)%maxsize;
  return(1);
 }
}
/*****************************************************************************/
int QueueOut(SEQQUEUE *sq)
//将队列sq队首元素出队列,成功返回1,失败返回0
{
    if (QueueIsEmpty(*sq))
    {  
  printf("queue is empty!n");
  return 0;
 }
    else
    {        
  sq->front=(sq->front+1)%maxsize;
  return  1;
    }
}
/***********************7。图的广度周游**********************/
void BFS(GRAPH g,int v,int mark[])
//从v出发广度优先周游图g中能访问的各个顶点

  int v1,v2;
  SEQQUEUE q;
  QueueInit(&q); 
  QueueIn(&q,v);
  mark[v]=1;
  printf("%c   ",g.vexs[v]);
  while(QueueIsEmpty(q)==0)  
  { 
    QueueFront(q,&v1);
    QueueOut(&q); 
    for(v2=0;v2<g.num;v2++)
    {
      if(g.arcs[v1][v2]!=0&&mark[v2]==0)
      { 
     QueueIn(&q,v2);
     mark[v2]=1;
     printf("%c   ",g.vexs[v2]);
      }
     }
  }
}
/***********************8。图的广度周游**********************/
void GraphBFS(GRAPH  g)
//深度优先周游图g中能访问的各个顶点
{
 int qidian,v,v1,mark[maxsize];
 printf("n广度周游:");
 printf("n请输入起点的下标:");
 scanf("%d",&qidian);
 for(v=0;v<g.num;v++)
 {
  mark[v]=0;
 }
 for(v=qidian;v<g.num+qidian;v++)
 {
  v1=v%g.num;
  if(mark[v1]==0)
   BFS(g,v1,mark);
 }
}

/***********************主函数**********************/

void main()