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 |
啊啊啊,原来是这个。。。太惨了,这题居然因为这个原因,让我郁闷了一个月,悲剧。In Reply To:先dfs拓排,再看拓排关系 是否每两个相邻的 都有边连,为什么WA呢? Posted by:lizeliang at 2009-09-19 19:56:42 test_seq...... > #include<iostream> > #include<cstdio> > using namespace std; > > int v,e,seqi,ei; > bool end; > int from[2000000],to[2000000]; > int map[30][30],seq[30],mark[30]; > > bool init() > { > char t,q; > ei=0; > end=false; > memset(map,0,sizeof(map)); > for(int i=0;i<e;i++) > { > cin>>t>>q>>q; > from[ei]=t-'A'; > to[ei]=q-'A'; > ei++; > } > return true; > } > bool dfs(int pos) > { > if(mark[pos]==1) > { > end=true; > return end; > } > else if(mark[pos]==0) > { > mark[pos]=1; > for(int i=0;i<v;i++) > if(map[pos][i] && mark[i]!=-1) > if(dfs(i)) > break; > } > mark[pos]=-1; > seqi--; > seq[seqi]=pos; > return end; > } > void test_seq(int t) > { > int i; > for(i=0;i<v-1;i++) > if(!map[i][i+1]) > break; > if(i==v-1) > { > end=true; > printf("Sorted sequence determined after "); > printf("%d relations: ",t+1); > for(int j=0;j<v;j++) > printf("%c",(char)(seq[j]+'A')); > printf(".\n"); > } > } > void toposort(int t) > { > int i; > seqi=v; > memset(mark,0,sizeof(mark)); > for(i=0;i<v;i++) > if(mark[i]==0) > if(dfs(i)) > break; > if(i<v) > { > printf("Inconsistency found after %d relations.\n",t+1); > return ; > } > test_seq(t); > } > void solve() > { > int i; > for(i=0;i<ei && !end;i++) > { > map[from[i]][to[i]]=1; > toposort(i); > } > if(!end) > printf("Sorted sequence cannot be determined.\n"); > } > int main() > { > while(scanf("%d%d",&v,&e),v) > { > init(); > solve(); > } > system("pause"); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator