题目链接:http://poj.org/problem?id=1094
题意:有26个字符,你输入形如x
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 205;
int in[maxn];
char ans[maxn];
vector<int>G[maxn];
int topu(int n)
{
memset(in,0,sizeof(in));
for(int i=0;i<n;i++)
{
for(int j=0;j<(int)G[i].size();j++)
{
int v = G[i][j];
in[v]++;
}
}
queue<int>q;
for(int i=0;i<n;i++)
{
if(in[i]==0)
q.push(i);
}
memset(ans,0,sizeof(ans));
int cnt = 0,flag = 0;
while(!q.empty())
{
if(q.size()>1)
flag = 1;
int u = q.front();
q.pop();
ans[cnt++] = u+'A';
for(int i=0;i<(int)G[u].size();i++)
{
int v = G[u][i];
in[v]--;
if(in[v]==0)
q.push(v);
}
}
if(cnt!=n)
flag = 2;
return flag;
}
int main(void)
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
if(n==0 && m==0)
break;
for(int i=0;i<n;i++)
G[i].clear();
int flag = 0,tt;
for(int i=0;i<m;i++)
{
char a[10];
scanf("%s",a);
int u = a[0]-'A',v = a[2]-'A';
G[u].push_back(v);
if(flag==0)
{
int tmp = topu(n);
if(tmp==2)
{
tt = i;
flag = 2;
}
if(tmp==0)
{
flag = 1;
tt = i;
}
}
}
if(flag==2)
printf("Inconsistency found after %d relations.\n",tt+1);
else if(flag==1)
printf("Sorted sequence determined after %d relations: %s.\n",tt+1,ans);
else
printf("Sorted sequence cannot be determined.\n");
}
return 0;
}
/*
5 5
A<B
B<C
C<D
D<E
E<A
6 6
A<F
B<D
C<E
F<D
D<E
E<F
*/