poj 1094
唉 这几天有点热 有点烦躁 以后能做成什么样。。。。
题意:给定n个字母《0+A,...n+A》 和m个关系 想x>y 问是否能唯一确定他们的大小关系
1 在第几个关系能确定他们的排序 就输出这个位置和排序
2 如果出现矛盾就输出矛盾的位置
3 整个关系输入之后还不能确定则输出不能确定关系
#include<iostream> #include<cstring> using namespace std; int map[55][55]; int in[55]; int jie[55]; int n; int sort()//1 不能排序 ; 2 能排序 { int ji[55]; int f=2; // memset(s,0,sizeof(s)); int i,j; int x,sum; for(i=1;i<=n;i++) ji[i]=in[i]; for(i=1;i<=n;i++) { sum=0; for(j=1;j<=n;j++) if(ji[j]==0) { sum++; x=j; } if(sum==0) return 1; //是否有环 if(sum>1) f=0; jie[i]=x; ji[x]=-1; for(j=1;j<=n;j++) if(map[x][j]) ji[j]--; } return f; } int main() { int yes,i; char s[11]; int m; while(cin>>n>>m) { yes=0; if(n==0&&m==0) break; memset(in,0,sizeof(in)); memset(map,0,sizeof(map)); for(i=1;i<=m;i++) { cin>>s; if(yes) continue; int u=s[0]-'A'+1; int v=s[2]-'A'+1; if(s[1]=='<') { if(map[v][u]) { cout<<"Inconsistency found after "<<i<<" relations."<<endl; yes=1; continue; } map[u][v]=1; in[v]++; } else { if(map[u][v]) { cout<<"Inconsistency found after "<<i<<" relations."<<endl; yes=1; continue; } map[v][u]=1; in[u]++; } int x=sort(); if(x==1) { cout<<"Inconsistency found after "<<i<<" relations."<<endl; yes=1; continue; } if(x==2) { cout<<"Sorted sequence determined after "<<i<<" relations: "; for(int j=1;j<=n;j++) cout<<(char)(jie[j]-1+'A'); cout<<'.'<<endl; yes=1; } } if(!yes) cout<<"Sorted sequence cannot be determined."<<endl; } return 0; }