思路
建图,输出图的拓扑序
code
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = 205;
int n, m;
int main()
{
cin >> n;
while(n--)
{
string str1, str2;
map<string, int> in;
map<string, vector<string>> mp;
set<string> se;
cin >> m;
for(int i = 1; i <= m; i++)
{
cin >> str1 >> str2;
se.insert(str1), se.insert(str2);
mp[str1].push_back(str2);
in[str2]++;
}
queue<string> q;
for(set<string>::iterator it = se.begin(); it != se.end(); it++)
if(in[(*it)] == 0)
q.push((*it));
while(q.size())
{
string x = q.front();
q.pop();
cout << x << " ";
for(vector<string>::iterator it = mp[x].begin(); it != mp[x].end(); it++)
{
in[(*it)]--;
if(in[(*it)] == 0)
q.push((*it));
}
}
cout << '\n';
}
return 0;
}