/* 图形的广度优先搜寻法 */
#include <stdlib.h> #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; /* 插入结尾 */ } }
|