第三点一直不对,answer too long on line 1
查看原帖
第三点一直不对,answer too long on line 1
340314
neu_greg_hu楼主2021/2/23 09:22

#代码如下

#include <iostream>
#include <set>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
vector<set<int> > map;
vector<int> visit;
vector<int> path;
stack<int> p;
queue<int> q;
int main()
{
	set<int> nu;
	int n, m;
	cin >> n >> m;
	for (int i = 0; i <= n; i++) {
		map.push_back(nu);
	}
	for (int i = 0; i < m; i++) {
		int a, b;
		cin >> a >> b;
		map[a].insert(b);
	}
	//深搜和广搜的路径
	for (int i = 0; i < n + 1; i++) {
		visit.push_back(0);
	}
	//深搜
	p.push(1);
	path.push_back(1);
	visit[1] = 1;
	while (!p.empty()) {
		if (!map[p.top()].empty()) {
			set<int>::iterator it = map[p.top()].begin();
			while (visit[*it] && it != map[p.top()].end()) { it++; }
			if (it != map[p.top()].end())
			{
				p.push(*it); path.push_back(*it); visit[*it] = 1;
			}
			else {
				p.pop();
			}
		}
		else {
			p.pop();
		}
	}
	for (int i = 0; i < n; i++) {
		cout << path[i] << ' ';
		visit[i + 1] = 0;//重新恢复未访问
	}
	path.clear();
	//广搜
	cout << endl;
	path.push_back(1);
	visit[1] = 1;
	q.push(1);
	while (!q.empty()) {
		if (!map[q.front()].empty()) {
			set<int>::iterator it = map[q.front()].begin();
			while (it != map[q.front()].end()) {
				if (!visit[*it]) {
					q.push(*it);
					path.push_back(*it);
					visit[*it] = 1;
				}
				it++;
			}
		}
		q.pop();
	}
	for (int i = 0; i < n; i++) {
		cout << path[i] << ' ';
	}
}

2021/2/23 09:22
加载中...