求助,一直过不去
查看原帖
求助,一直过不去
427120
KS_tips_CN楼主2021/7/20 11:03
//这里,样例可以过,自己写了很多图也是可以过的,但是交上去就是全WA,实在是找不到bug了,求助
```
 #include<bits/stdc++.h>
using namespace std;
vector<int> q[100002];
bool ask[100002][2];
void dfs(int x){
 
//	if(q[x].size()==0) return ;
//如果没有后继,那么返回
//接下来开始从下继们一个个枚举
	ask[x][0]=1;
	cout<<x<<' ';
//如果这个值还没有输出过的话就输出一次并且标记 
//如果这个值输出果,那么就不需要再次搜索了 
for(int i=0;i<q[x].size();i++)
		if(!ask[q[x][i]][0])
			dfs(q[x][i]);
//如果x的下属xi并没有被搜索过,那么搜索这个点 
return ;
}
queue<int> Q;

int main(){
int m,n;
cin>>n>>m;
//n是结点数,m是边数
for(int i=1;i<=m;i++){
	int a,b;
	cin>>a>>b;
	q[a].push_back(b);
	//将a的一个下属b压入编号为a的不定数组q[a] 
}
//现在已经将所有边的关系记录下来了,接下来是遍历
dfs(1);
//将访问记录数组归零,广搜还需要用 
cout<<endl;
Q.push(1);
int head;

while(!Q.empty()){
	head=Q.front();
	Q.pop();
	ask[head][1]=1;
	cout<<head<<' ';
	//将取出的队首输出 
	//取出了队首,并且将队首的所有 未搜索下属 全部压入队列 
	for(int i=0;i<q[head].size();i++){
		if(ask[q[head][i]][1]==0){
			//如果下属中这一项没有被搜索过
			ask[q[head][i]][1]=1;
			Q.push(q[head][i]);
			//将这一项记录为搜索过并且压入队列等待广搜 
		}
	}
}

return 0;
}
```
2021/7/20 11:03
加载中...