图的深度和广度优先遍历

                                                          图的广度优先     

#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
	int i,j,n,m,a,b,cur,book[101]={0},e[101][101];
	int que[10001],head,tail;
	cin>>n>>m;
	//初始化二维数组 
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	   if(i==j) e[i][j]=0;
	   else e[i][j]=9999999;
	   //读入顶点之间的边 
	   for(int i=1;i<=m;i++){
	   	cin>>a>>b;
	   	e[a][b]=1;
	   	e[b][a]=1;//由于是无向图 
	   }
	   head = 1; tail = 1;//队列的初始化 
	   que[tail]=1;
	   tail++;
	   book[1]=1;//标记1号点已经访问了 
	   while(head<tail&&tail<n){//队列不为空 
	   	cur=que[head];//当前访问的顶点 
	   	for(i=1;i<=n;i++){
	   		if(e[cur][i]==1&&book[i]==0){//如果没有访问,则入队 
	   			que[tail]=i;
	   			tail++;
	   			book[i]=1;//标记已经访问 
			   }
			   if(tail>n){
			   	break;
			   }
		   }
		   head++;//一层层的遍历 
	   }
	   for(int i=1;i<tail;i++){
	   	cout<<que[i]<<" ";
	   }
   }

 
                                                                          图的深度优先

#include<cstdio>
#include<iostream>
using namespace std;
int book[101],sum,n,e[101][101];
void dfs(int cur){
	int i;
	cout<<cur<<" ";
	sum++;
	if(sum==n) return;//如果所有的都遍历完了,则完全退出 
	for(int i=1;i<=n;i++){
		if(e[cur][i]==1&&book[i]==0){//如果该点没有访问,则标记它,继续深入 
			book[i]=1;
			dfs(i);
		}
	}
	return;
}
int main(){
	int i,j,m,a,b;
	cin>>n>>m;
	//初始化二维矩阵 
	for(int i=1;i<=n;i++)
	  for(int j=1;j<=n;j++)
	    if(i==j) e[i][j]=0;
	    else  e[i][j]=99999;
	    //读入顶点之间的边 
	for(int i=1;i<=m;i++){
		cin>>a>>b;
		e[a][b]=1;
		e[b][a]=1;
	}
	book[1]=1;
	dfs(1);
} 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值