#include<queue>
#include<vector>
#include<string.h>
using namespace std;
vector<int> data[11]; //拓扑序列
int indegree[11]; //每个节点的入度数组
int n;
queue<int> Q; //维护队列
string path=""; //保存拓扑序列
int pre[11]; //记录前一节点
bool flag=false; //是否找到
void pf(int now)
{
if(now==-1)
return ;
pf(pre[now]);
cout<<now<<" ";
}
void topo()
{
while(!Q.empty())
{
int now=Q.front(); //起点出队
Q.pop();
char ch=now+'0';
path+=ch;
if(ch=='1')
{
flag=true;
break; //找到了
}
indegree[now]=-1; //标记访问过的节点
for(int k=0;k<data[now].size();++k) //对邻接点的入度进行修改
{
int next=data[now][k];
indegree[next]--; //入度减1
if(indegree[next]==0) //入度为0
{
pre[next]=now;
Q.push(next); //next节点入队
}
}
}
}
int main()
{
memset(indegree,0,sizeof(indegree));
cin>>n; //输入节点数
for(int i=2;i<=n+1;++i)
{
int k;
cin>>k; //数据数目
indegree[i-1]=k; //计算入度
if(indegree[i-1]==0)
{
Q.push(i-1); //入队
pre[i-1]=-1; //初始起点的前一节点为-1
}
for(int j=0;j<k;++j)
{
int temp;
cin>>temp;
data[temp].push_back(i-1); //构图
}
}
topo();
if(flag)
pf(1);
else
cout<<"What a poor boy!"<<endl;
return 0;
}
这是我写的,大家看下哪里有问题。求指教!