图的深度和广度优先遍历

                                                          图的广度优先     

#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);
} 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/fanke666/article/details/75671997
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞