Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我的代码用了拓朴和DFS,所有恶心数据都测试正确。。。。。!可它就是WA,哪位大侠帮我看看,感激不尽!#include <cstdio> #include <cstring> int tp[30][30]; int Q[60],ord[30]; int in[30]; int post[30],pre[30]; int n,m,cnt,cntp; int dfs(int s) { int flag=1; pre[s]=cnt++; //前序标记 for (int i=0;i<n;i++) if (tp[s][i]) { if (pre[i]==-1) { flag=dfs(i); if(flag==0) return 0;} else if(post[i]==-1) return 0; } post[s]=cntp++;//后序标记,主要就是用它来判断回边 return flag; } int main() { char l,r,b; int d1,d2; int head,tail,time=0; while (scanf("%d%d",&n,&m)) { if (n==0 && m==0 ) break; int ans=0; //ans=1表示排序成功,2表示环存在,3表示不明序 int count,i,num=0; int order=0,head,tail; for ( i=0;i<n;i++) for (int j=0;j<n;j++) tp[i][j]=0; for ( i=0;i<n;i++) in[i]=-1; //把入度初始化为-1,入度>=0来判断出现点数 for ( count=1;count<=m;count++) { scanf("%c",&l); while ( l<'A' || l>'Z') scanf("%c",&l); scanf("%c%c",&b,&r); if (ans==1 || ans==2) continue; d1=l-'A';d2=r-'A'; if (!tp[d1][d2])//保证重复边不会出错 { if (in[d2]==-1) { in[d2]=1;num++;} else in[d2]++; tp[d1][d2]=1; if (in[d1]==-1) { in[d1]=0; num++;} } memset(post,-1,sizeof(post)); memset(pre,-1,sizeof(pre)); //用DFS来判断有无环 cnt=0;cntp=0; for (i=0;i<n;i++) if (in[i]>=0 && pre[i]==-1) if (!dfs(i)) { ans=2; time=count;break;} //如果点数目齐了可以用拓扑排排看能不能排出来 if (ans!=2 && num==n) { head=tail=0; for ( i=0;i<n;i++) if (in[i]==0) Q[tail++]=i; ans=0; while (tail>head) { if (tail-head>1) { ans=3; break;} int k=Q[head++]; ord[order++]=k; for (int j=0;j<n;j++) if (tp[k][j] ) { if (--in[j]==0) Q[tail++]=j; } } if (ans!=3) { ans=1; time=count;} } } if (ans==0 && order<n) ans=3; //如果点没有完全出现,肯定不明序 switch(ans) { case 1:{ printf("Sorted sequence determined after %d relations: ",time); for (int i=0;i<order;i++) printf("%c",'A'+ord[i]); printf(".\n");break; } case 2: printf("Inconsistency found after %d relations.\n",time);break; case 3: printf("Sorted sequence cannot be determined.\n");break; } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator