| ||||||||||
| 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>
#define N 20
#define M 4
int edge_len,findtag;
int a[N];
int used[N];
void sort(int a[],int n);
void square(int s,int n);
void dfs(int m,int curlen,int cur,int n);
int main()
{
int testcase,i;
scanf("%d",&testcase);
for(i=0;i<testcase;i++)
{
int stick_num,j;
scanf("%d",&stick_num);
for(j=0;j<stick_num;j++)
scanf(" %d",a+j);
int sum_len=0;
for(j=0;j<stick_num;j++)
{
used[j]=0;
sum_len+=a[j];
}
if(sum_len%4!=0) //pruning first time
{
printf("no\n");
continue;
}
edge_len=sum_len/4;
sort(a,stick_num);
if(a[0]>edge_len)//pruning the second time
{
printf("no\n");
continue;
}
findtag=0;
square(4,stick_num);//start from the first edge
if(findtag)
printf("yes\n");
else
printf("no\n");
}//for testcase
return 0;
}
void square(int m,int n)
{
int i;
if(m==1)
{
findtag=1;
return ;
}
else
{
for(i=0;i<n;i++)
if(!used[i])
break;
used[i]=1;
dfs(m,a[i],i,n);//current position has not been used,and it must exist a road
//used[i]=0;
}
return ;
}
void dfs(int m,int curlen,int next,int n)
{
int i;
if(findtag)
return ;
if(edge_len==curlen)
{
square(m-1,n);
return ;
}
else
{
for(i=next+1;i<n;i++)
if(!used[i])
{
used[i]=1;
if(curlen+a[i]<=edge_len)
dfs(m,curlen+a[i],i,n);
if(findtag)
return ;
used[i]=0;
}
}
}
void sort(int a[],int n)
{
int t;
int i,j;
for(i=1;i<n;i++)
{
t=a[i];
j=i-1;
while(j>=0&&a[j]<t)
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
}
我把square函数中的used[i]=0;注释掉就会错,但是我想了很久还是觉得这句可以不要
因为a[i]以后都不会被用到了
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator