/*    图形的广度优先搜寻法                  */ 
#include 
#define MAXQUEUE 10               /* 伫列的最大容量       */  
struct node                       /* 图形顶点结构宣告     */ 
{ 
   int vertex;                    /* 顶点资料             */ 
   struct node *nextnode;         /* 指下一顶点的指标     */ 
}; 
typedef struct node *graph;       /* 图形的结构新型态     */ 
struct node head[9];              /* 图形顶点结构数组     */ 
int visited[9];                   /* 遍历记录数组         */ 
int queue[MAXQUEUE];              /* 伫列的数组宣告       */ 
int front = -1;                   /* 伫列的前端           */ 
int rear = -1;                    /* 伫列的后端           */ 
/* ---------------------------------------- */ 
/*  建立图形                                */ 
/* ---------------------------------------- */ 
void creategraph(int *node,int num) 
{ 
   graph newnode;                 /* 新顶点指标           */ 
   graph ptr; 
   int from;                      /* 边线的起点           */ 
   int to;                        /* 边线的终点           */ 
   int i; 
   for ( i = 0; i < num; i++ )    /* 读取边线的回路       */ 
   { 
      from = node[i*2];           /* 边线的起点           */ 
      to = node[i*2+1];           /* 边线的终点           */ 
      /* 建立新顶点记忆体 */ 
      newnode = ( graph ) malloc(sizeof(struct node)); 
      newnode->vertex = to;       /* 建立顶点内容         */ 
      newnode->nextnode = NULL;   /* 设定指标初值         */ 
      ptr = &(head[from]);        /* 顶点位置             */ 
      while ( ptr->nextnode != NULL ) /* 遍历至链表尾     */ 
         ptr = ptr->nextnode;         /* 下一个顶点       */ 
      ptr->nextnode = newnode;        /* 插入结尾         */ 
   } 
}