社区讨论

0分求调(BFS还没写,但DFS有问题)

P5318【深基18.例3】查找文献参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkia2ozs
此快照首次捕获于
2026/01/17 20:22
上个月
此快照最后确认于
2026/01/20 15:40
4 周前
查看原帖
CPP
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define Please return
#define AC 0
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
const int MAXN = 1e5 + 5;
const int MAXM = 4e5 + 5;
int n, m, cnt, step;
bool f;

vector<int> head(MAXN, -1); 
vector<int> a(MAXN, 0);
vector<bool> vis(MAXN, false);
vector<int> s(1);

struct Edge {
	int to, next;
};
vector<Edge> edge(MAXM);

void init() {
	cnt = 0;
	step = 0;
	f = false;
}

void add(int u, int v) {
	cnt++;
	edge[cnt].to = v;
	edge[cnt].next = head[u];
	head[u] = cnt;
}

void dfs(int u) {
	vis[u] = true;
	a[++step] = u;
	if (step == n) {
		cout << 1 << " ";
		for (int i = 2; i <= n; i++) {
			cout << a[i] << " ";
		}
		f = true;
		return;
	}
	for (int i = head[u]; i != -1; i = edge[i].next) {
		int v = edge[i].to;
		if (!vis[v]) {
			s.push_back(v);
		}
	}
	sort(s.begin(), s.end());
	for (int v : s) {
		dfs(v);
		if (f) return;
	}
	vis[u] = false;
	step--;
}

int main() {
	cin >> n >> m;
	init();
	for (int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		add(u, v);
		add(v, u);
	}
	dfs(1);
	Please AC;
}
// BFS还没写

回复

0 条回复,欢迎继续交流。

正在加载回复...