作业介绍
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int n, m;
vector<int> g[100005];
int v[100005]; // 维护每个节点的入度信息
int cnt = 0;
int res[100005];
// 拓扑排序
void GTS(){
// 广搜队列
queue<int> q;
// 找到入度为0的节点
for(int i=1;i<=n;i++){
if(v[i] == 0){
q.push(i);
}
}
// 开始广搜
while(!q.empty()){
// 取出对首节点
int t = q.front();
cnt++;
res[cnt] = t;
// 删除队首节点
q.pop();
for(int i=0;i<g[t].size();i++){
// 删掉这条边,终点的入度-1
int z = g[t][i];
v[z]--;
if(v[z] == 0) q.push(z);
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x, y;
cin>>x>>y;
// x ---> y
g[x].push_back(y);
v[y]++;
}
GTS();
if(cnt < n) cout<<"has circle";
else{
for(int i=1;i<=cnt;i++){
cout<<res[i]<<' ';
}
}
return 0;
}
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 2
- 开始时间
- 2025-5-5 9:00
- 截止时间
- 2025-5-15 23:59
- 可延期
- 24 小时