求助,后四个点WA
查看原帖
求助,后四个点WA
218974
wsadjkl0楼主2021/6/19 14:17

把输入的数据排序了之后存到了vector邻接表里面,然后只能过第一个点555

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;

int n, m;
struct ascend{
	int x, y;
};
ascend tmp[1000005];//存储输入

queue<int> q;//广搜容器
vector<int> v[MAXN];//深搜容器邻接表
bool p[MAXN], pp[MAXN];//两个访问“标记”数组
//排序函数
bool cmp(ascend a, ascend b){
	if(a.x != b.x) return a.x<b.x;
	if(a.y != b.y) return a.y<b.y;
}
//不能再标准的深搜和广搜
void dfs(int x){
    cout << x << ' ';
	for(int i = 0; i < v[x].size(); i++){
		if(!p[v[x][i]]) {
		p[v[x][i]] = true;
		dfs(v[x][i]);
	    }
    }
}
void bfs(int x){
	q.push(x);
	while(!q.empty()){
		x = q.front();
		q.pop();
		cout << x << ' ';
		for(int i = 0; i < v[x].size(); i++){
			if(!pp[v[x][i]]){
				q.push(v[x][i]);
				pp[v[x][i]] = true;
			}
		}
	}
}
int main(){
	//输入
	cin >> n >> m;
	for(int i = 0; i < m; i++){
		cin >> tmp[i].x >> tmp[i].y;
	}
    //排序
	sort(tmp, tmp+m, cmp);
    //存入邻接表
	for(int i = 0; i < m; i++){
		int x, y;
		x = tmp[i].x; y = tmp[i].y;
		v[x].push_back(y);
	}
	/*检查排序,结果正确
    for(int i = 0; i < m; i++) cout << tmp[i].x << ' ' << tmp[i].y << endl;
    cout << "-----------------" <<endl;
    */
	dfs(1);
    cout << endl;
    bfs(1);
	return 0;
}
2021/6/19 14:17
加载中...