POJ 1094 拓扑排序
2016-08-03 12:55
375 查看
题意大坑,建议先看Discuss……
否则代码写得就像以下的一团糟。。。。
其实并不难,拓扑排序+乱搞就可以AC。
// by SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char jy[4],vis[26],in[26],temp[26],flag,VIS[26],F,rec,G; int first[30],next[999],v[999],tot,n,m,s[999]; void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;} int main(){ while(scanf("%d%d",&n,&m)&&(n||m)){ memset(VIS,0,sizeof(VIS)); memset(in,0,sizeof(in)); memset(first,-1,sizeof(first)),tot=F=0; for(int ii=1;ii<=m;ii++){ rec=G=0,memset(vis,0,sizeof(vis)); scanf("%s",jy);jy[0]-='A',jy[2]-='A'; if(F)continue; add(jy[0],jy[2]),in[jy[2]]++; VIS[jy[0]]=VIS[jy[2]]=1; for(int i=0;i<n;i++)temp[i]=in[i]; while(1){ char minus[26]; memset(minus,0,sizeof(minus)); flag=0; for(int i=0;i<n;i++) if(!temp[i]&&!vis[i]&&VIS[i]){ s[rec++]=i; if(flag)G=1; vis[i]=flag=1; for(int j=first[i];~j;j=next[j])minus[v[j]]++; } for(int i=0;i<n;i++)temp[i]-=minus[i]; if(!flag){ for(int i=0;i<n;i++) if(VIS[i]&&temp[i]){printf("Inconsistency found after %d relations.\n",ii),F=1;goto en;} else if(!vis[i])goto en; if(!G){ F=1,printf("Sorted sequence determined after %d relations: ",ii); for(int i=0;i<rec;i++)printf("%c",s[i]+'A');puts("."); } en:break; } } if(ii==m&&!F&&G)puts("Sorted sequence cannot be determined."); } } }
相关文章推荐
- poj1094 Sorting It All Out (拓扑排序)
- poj 1094 Sorting It All Out (拓扑排序)
- poj 1094 拓扑排序变形
- poj1094 拓扑排序
- POJ1094 Sorting It All Out(拓扑排序)每输入条关系判断一次
- POJ_1094_sorting it all out_拓扑排序
- Sorting It All Out - poj 1094 (拓扑排序)
- poj 1094 拓扑排序(给不等式判断递增串)
- Poj 1094 拓扑排序 水题
- POJ 1094-Sorting It All Out(元素大小关系-拓扑排序)
- POJ 1094(拓扑排序)
- poj 1094 Sorting It All Out (拓扑排序)
- poj 1094 拓扑排序
- poj 1094 Sorting It All Out(java + 拓扑排序)
- POJ 1094-Sorting It All Out(拓扑排序)
- POJ 1094-Sorting It All Out 拓扑排序
- POJ 1094(拓扑排序)
- poj 1094 Sorting It All Out 拓扑排序
- POJ 1094: Sorting It All Out( 拓扑排序 )
- POJ 1094-Sorting It All Out(拓扑排序)