| ||||||||||
| 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<stdio.h>
#include<string.h>
//#include<conio.h>
int main(){
int n,m;
int pre[21000]={0}; //存放每个节点的前驱
bool mark[21000]={false};//mark【】标记那个点是否是树的节点(包括根节点)
int flag=1;//标记是否是树
int cnt=0;//输出case %d 时用
int vexnum=0, edge=0;//分别记录节点和边数目
while(scanf("%d%d",&n,&m)){
if(n==-1&&m==-1) break;
if(n==0&&m==0) {
cnt++;int i;
int count=0;//记录根节点的数目
if(vexnum-1!=edge) flag=0;
else{
for(i=1;vexnum;i++){
if(mark[i]==1) {
if(pre[i]==0)count++;
vexnum--;
}
}
if(count!=1) flag=0;//如果不是只有一个根节点 ,不是树
}
if(vexnum==0&&edge==0){ printf("Case %d is a tree.\n",cnt); continue;}//空的也是树
if(flag)
printf("Case %d is a tree.\n",cnt);
else printf("Case %d is not a tree.\n",cnt);
/*还原到初始值*/
flag=1;
memset(pre,0,sizeof(pre));
memset(mark,false,sizeof(mark));
vexnum=0, edge=0;
continue;
}
edge++;
if(mark[n]==0){ vexnum++; mark[n]=1;}
if(mark[m]==0){ vexnum++; mark[m]=1;}
if(pre[m]==0) pre[m]=n;//记录前驱
else flag=0; //如果一个点前驱不唯一,不是树
}
//getch();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator