#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cstring>
#include<math.h>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
string Str;
vector<int>G[30];
int d[30],n=0;
queue<int>Q;
vector<char>temp;
vector<int>res;
set<char>st;
char a,b,c;
void Top()
{
for(int i=0;i<n;i++){
if(!d[temp[i]-'A']) Q.push(temp[i]-'A');
}
int u=0,v=0;
while (!Q.empty()) {
u=Q.front(); Q.pop();
res.push_back(u);
for(int i=0;i<G[u].size();i++){
v=G[u][i];
d[v]-=1;
if(d[v]==0) Q.push(v);
}
}
}
int main()
{
memset(d,0,sizeof(d));
while (cin>>Str) {
/*
if(int(a)==13) break;
cout<<a<<" "<<c<<endl;
G[a-'A'].push_back(c-'A');
d[c-'A']+=1;
if(!st.count(a)){
temp.push_back(a);
st.insert(a);
}
if(!st.count(c)){
temp.push_back(c);
st.insert(c);
}
*/
//if(Str[0]==13) break;
//cout<<Str[0]<<" "<<Str[2]<<endl;
G[Str[0]-'A'].push_back(Str[2]-'A');
d[Str[2]-'A']+=1;
if(!st.count(Str[0])){
temp.push_back(Str[0]);
st.insert(Str[0]);
}
if(!st.count(Str[2])){
temp.push_back(Str[2]);
st.insert(Str[2]);
}
}
/*
for(int i=0;i<n;i++){
cout<<d[temp[i]-'A']<<endl;
}*/
n=temp.size();
Top();
for(int i=0;i<res.size();i++){
printf("%c",res[i]+'A');
cout<<";";
}
cout<<endl;
//cout<<Str<<endl;
return 0;
}
hw+拓扑排序
最新推荐文章于 2021-01-09 19:18:25 发布