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 |
郁闷……算法虽然笨了点,但是个人觉得没问题了啊……测试数据都过了,就是WA………… 我是新手,哪位大哥可以赐教? #include <iostream> using namespace std; int tree(int &m) { m++; int fa[100]; int ch[100]; int i,p,q;//定义三个循环变量 int f=0,n=0; int flag=1;//定义判断变量,附初值为“真” int bootn=0;//判断根的数目,附初值为0; int boot=-10;//定义根变量 for(i=1;i<100;i++)//存储所需数据 { cin>>fa[i]; cin>>ch[i]; if(fa[1]<0&&ch[1]<0)//判断是否结束输入 { f=1; break; } n=n+1; if(fa[i]==ch[i]&&fa[i]!=0)//判断是否指向自己 f=2; if(fa[i]==0&&ch[i]==0) break; } if(f==2) return (flag=0);//如果自己指向自己则不是树 if(fa[1]==0&&ch[1]==0) return (flag=1); if(f==1) return (flag=2); else { for(p=1;p<n;p++)//一个“孩子”不能有两个“父亲” { int y; for(y=1;y<n;y++) { if(ch[p]==ch[y]&&p!=y) return (flag=0); } } //cout<<"go on"<<endl; for(q=1;q<n;q++)//“父亲”中不能有两个不相同的根 { if(fa[q]==boot) break; int x,f2=1; for(x=1;x<n;x++) { if(fa[q]==ch[x]) //如果在子数组中存在,则不为根 { f2=0; break; } } if(f2==1) { boot=fa[q]; bootn++; } } // cout<<"bootn="<<bootn<<" boot="<<boot; if(bootn!=1) flag=0; //cout<<" "<<flag<<endl; return flag; } } int main() { //freopen("D:/in.txt","r",stdin); int tree(int &); int k=0; int flag[100]; int i=1,p; while(i<100) { flag[i]=tree(k); if(flag[i]==2) break; i++; } for(p=1;p<k;p++) { if(flag[p]==0) cout<< "Case "<<p<<" is not a tree." <<endl; if(flag[p]==1) cout<< "Case "<<p<<" is a tree." <<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator