DFS生成森林代码

22 篇文章 0 订阅
13 篇文章 1 订阅

DFS生成森林代码


typedef char TElemType;

typedef struct CSNode{
	TElemType data;
	CSNode *firstChild, *nextSibling;
}CSNode,*CSTree; 

void DFSForest(Graph G,CSTree &T)
{
	T = NULL; //生成森林的根 
	bool visited[MAXSIZE]; //标记 
	for(int i = 0; i < G.vexnum; i++)
		visited[i] = false;
	CSNode pre; //保存前一个兄弟 
	for(int v = 0; v < G.vexnum; v++)
	{
		if(!visited[v])
		{
			CSNode* p = (CSNode*)malloc(sizeof(CSNode)); //创建结点 
			*p = {getValue(G,v), NULL, NULL}; //赋值 
			if(!T) T = p;   //v是生成森林的第一棵子树 
			else pre->nextSibling = p;  //后一棵树做前棵的兄弟 
			pre = p;  //第一次后赋值 
			DFSTree(G, v, p);  //以p为根创建其子树 
		}
	} 
}

void DFSTree(Graph G, int v, CSTree &T)
{
	visited[v] = true;
	bool first = true; //标记是否第一个兄弟 
	CSNode *pre;
	for(int w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))
	{
		if(!visited[w])
		{
			CSNode *p = (CSNode*)malloc(sizeof(CSNode));
			*p = {getValue(G,w), NULL, NULL};
			if(first)
			{
				T->firstChild = p; first = false; 
			}
			else pre->nextSibling = p;
			pre = p;
			DFSTree(G,w,p);
		}
	}
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值