DFS

#include <bits/stdc++.h>

using namespace std;
//结点的个数不能多于100
vector <int> g[123];//邻接表:从0下标开始,每一个一维表示连接了哪些结点
//vector中,[123]去掉才表示一维数组
bool vis[123];//该节点是否被访问
void dfs(int x){
	//1、表示该节点已经走过
	vis[x]=true;
	cout<<x<<' ';//表示访问当前节点
	//2、从小到大访问有关系的结点,往下递归
	//不用for,用增强for循环,只能查询,不能修改
	for(int v:g[x]){
		if(!vis[v]){
			dfs(v);
		}
	}
	return ;
}
int main(){
	int n,m;//n个结点,m种关系
	cin>>n>>m;
	int u,v;//从u到v
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		//u连接v的动态数组
		g[u].push_back(v);
	}
	for(int i=0;i<n;i++){
		if(!vis[i]);//没有访问才进入深搜
		dfs(i);//从第i个结点开始
		cout<<endl;
	}
	
	
	
	
	
	return 0;
}

BFS

//题目传送门:https://oj.aicoders.cn/problem/3273
#include <bits/stdc++.h>

using namespace std;
int n,m,a,b,goal;
struct node{
	int num;
	int step;
	//将此字符串与下一个节点拼接
	string ans;
};
int Map[56][56];
bool vis[56];
queue<node> q;
void bfs(){
	while(!q.empty()){
		node fr=q.front();
		q.pop();
		if(fr.step<=5&&fr.num==goal){
			cout<<"YES"<<endl;
			cout<<fr.ans<<goal;
			return ;
		}
		for(int i=1;i<=n;i++){
			if(!vis[i]&&Map[fr.num][i]){
				string s1;
				vis[i]=true;
				s1=fr.ans+to_string(fr.num)+" ";
				q.push({i,fr.step+1,s1});
			}
		}
	}
	cout<<"NO";
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a>>b;
		Map[a][b]=1;
		Map[b][a]=1;
	}
	cin>>goal;
	q.push({1,0,""});
	bfs();

	
	return 0;
}

看U盘!(紫)