/* 利用深度优先遍历,找出图中的所有连通图(子图)
* 图用邻接表表示 *graph[], 利用边的信息来创建adjacency lists
*/
#include<stdio.h>
#include<stdlib.h>
#define MAXVERTICES 20
#define MAXEDGES 20
typedef enum {
FALSE,
TRUE,
TRISTATE
} bool;
typedef struct node
{
int dst;
struct node *next;
}node_t;
/* print graph in adjacency lists */
void printGraph(node_t *graph[], int nvert)
{
int i, j;
for(i=0; i<nvert; i++)
{
node_t *ptr;
printf("node %d: ", i);
for(ptr = graph[i]; ptr; ptr=ptr->next)
printf("[%d]", ptr->dst);
putchar('\n');
}
}
/*****************************find all connected components****************************************/
/* 头插法创建邻接表(没有单独的头节点,只有一个头指针,即指针数组) */
/* 此处因为头指针会改变,所以要传入指针的指针 */
/* @ptr: adjacency list head (*graph[])
* @dst: 待插入的节点(在graph中index)
*/
void insertEdge(node_t **ptr, int dst)
{
node_t *newnode = (node_t *)malloc(sizeof(node_t));
newnode->dst = dst;
newnode->next = *ptr;
*ptr = newnode;
}
/* buil
找出图中的所有连通子图(创建图的邻接表,深度优先遍历查找子图)
最新推荐文章于 2024-04-28 14:40:52 发布