BFS错在哪里了呢?
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct node{
int s, e;
}g[1000005];
int v[1000005], mark[1000005], n, m;
bool cmpfunc(node x, node y){
if(x.s == y.s){
return x.e < y.e;
}
return x.s < y.s;
}
void dfs(int x){
v[x] = 1;
cout << x << ' ';
int i = mark[x];
while((g[i].s == x) && (i < m)){
if(v[g[i].e] == 0){
dfs(g[i].e);
}
i++;
}
}
queue<int>q;
void bfs(){
queue<int>q;
q.push(g[0].s);
cout << g[0].s << " ";
while(!q.empty()){
int x = q.front();
int i = mark[x];
while((i<m) && (g[i].s == x)){
if(v[g[i].e] == 0){
q.push(g[i].e);
cout << g[i].e << " ";
v[g[i].e] = 1;
}
i++;
}
q.pop();
}
cout << endl;
}
int main(){
cin >> n >> m;
memset(mark, -1, sizeof(mark));
memset(v, 0, sizeof(v));
for(int i = 0; i < m; i++){
cin >> g[i].s >> g[i].e;
}
sort(g, g+m, cmpfunc);
int t = 0;
for(int i = 0; i < m; i++){
if(t != g[i].s){
t = g[i].s;
mark[t] = i;
}
}
dfs(1);
cout << endl;
memset(v, 0, sizeof(v));
bfs();
}