数据结构习题——DFS非递归/判断一个无向图G是否为一颗树

前言

日常输出一些题目

正文

题目一:

编写DFS非递归

void unrc_DFS(ALGraph G,int v){
	ArcNode *p;
	initStack(s);
	visited[v]=true;
	push(s,v);
	while(!isEmpty(s)){
		pop(s,p);visit(p);//弹出栈顶结点并访问
		p=G.vertices[v].firstarc
		int w=p.adjvex;
		/*获取每一个结点的firstarc和nextarc放入栈中(有点类似BFS把同一层的先入栈)*/
		while(p){
			if(visted[w]==false){
				push(s,w);	
	  			visited[w]=true
			}	
			p=p->nextarc;
		}
	}
}

题目二

判断一个无向图G是否为一颗树
关键:在图中,若是无环路的连通图或是边数等于结点数-1的连通图,则该无向图是一棵树

bool istree(ALGraph G){
	int i,Vnum=0,Lnum=0;
	int visited[MaxSxize];
	for(i=0;i<G.vexnum;i++){
		visited[i]=0;
	}
	DFS_TREE(G,1,Vnum,Lnum,visited);
	if(Vnum==G.vexnum&&Lnum==2*(G.vexnum-1))//若结点数(连通)和边数 满足条件
       return true;
    else 
       return false;
}
void is DFS_TREE(ALGraph G,int v,int *Vnum,int *Lnum,int visited[]){
	visited[v]=true;
	Vnum++;//结点数加1
	ArcNode *p;
	p=G.vertices[v].firstarc;
	while(p){
		Lnum++//边数加1
		if(!visited[p->adjvex])
		   DFS_TREE(G,p->adjvex,Vnum,Lnum,visited)
        p=p->nextarc;
	}
} 

**注意:**边数在遍历的时候走了两边,因为之前访问过的顶点也走了一遍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值