| ||||||||||
| 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 | |||||||||
Re:为什么我的一直WA,这不就是拓扑排序吗???In Reply To:为什么我的一直WA,这不就是拓扑排序吗??? Posted by:panning025 at 2012-07-19 09:58:04 > #include<iostream>
> using namespace std;
> int indegree[20]={0};//入度数组
> char vex[20];//节点数组
> bool v[20]={0};//标记数组,标记节点是否已访问
> int len;//节点个数
> char stack[20];//存放结果的栈
> int top=-1;
> bool bian[20][20]={0};//存放边
>
> void Iopo_Sort(int &sum)//拓扑排序(递归)
> {
> int i,j;
> if(sum==300)return;
> if(top==len-1)
> {
> for(i=0;i<len;i++)cout<<stack[i];
> cout<<endl;
> sum++;
> return;
> }
> for(i=0;i<len;i++)
> {
> if(indegree[i]==0&&!v[i])
> {
> stack[++top]=vex[i];
> v[i]=1;
> for(j=0;j<len;j++)
> if(bian[i][j])indegree[j]--;
>
> Iopo_Sort(sum);
>
> //===恢复记录==============
>
> for(j=0;j<len;j++)
> if(bian[i][j])indegree[j]++;
> v[i]=0;
> top--;
> }
> }
> }
> int main()
> {
> int i=0,j=0,k=0,sum=0;
> char c[210],d[110];
> while(gets(c))
> {
>
> //=============处理节点===========
> i=0;
> j=0;
> while(c[i]!='\0')
> {
> if(c[i]!=' ')vex[j++]=c[i++];
> else i++;
> }
> len=j;
> //========================
> //===========处理边和入度=============
> gets(c);
>
> k=0;
> i=0;
> while(c[k]!='\0')
> {
> if(c[k]==' ')k++;
> else
> d[i++]=c[k++];
> }
> char e,f,t1;
> for(j=0;j<i;j++)
> {
> e=d[j++];
> f=d[j];
> for(t1=0;t1<len;t1++)if(vex[t1]==e)break;
> for(k=0;k<len;k++)if(vex[k]==d[j]){indegree[k]++;break;}
> bian[t1][k]=1;
> }
> //=======================================
> sum=0;
> Iopo_Sort(sum);
>
> //================清理记录=========================
> for(i=0;i<20;i++)memset(bian,0,sizeof(bian));
> memset(v,0,20);
> memset(indegree,0,sizeof(indegree));
> top=-1;
> //===========================================
>
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator