题目描述
使用邻接表存储图及深度优先遍历图,并输出路径。
输入
第一行: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),如果有什么建议的话,欢迎评论!