图的深度优先遍历

题目描述

登录 - Keda

使用邻接表存储图及深度优先遍历图,并输出路径。

输入

第一行:n和m分别表示有nn个节点(编号从 1~n),m条边

接下来m行,每行有两个整数x和y,表示x到y之间有一条边。

输出

深度优先遍历路径(从1号节点开始)

样例

输入数据 1

5 5
1 2
1 3
5 3
2 4
2 3

输出数据 1

1 2 4 3 5

代码编写

用递归和深度优先遍历,需要用标记数组然后判断是否来过,没来过才能遍历,不然会冲突引发重复遍历导致WA!(别问我怎么知道的,本人试过!)

AC代码如下

#include<bits/stdc++.h>
using namespace std;
vector<int>e[1000];
bool vis[1000];
void DFS(int node){
	cout<<node<<" ";
	vis[node]=true;
	int len=e[node].size();
	for(int i=0;i<len;i++){
		if(!vis[e[node][i]]){ 
			DFS(e[node][i]);
		}
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	while(m--){
		int u,v;
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	DFS(1);
	return 0;
}

结语 

                                                                                                                                          ↑

好吧,我承认,内存占用是真的大(也不确定会不会MLE),如果有什么建议的话,欢迎评论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值