| ||||||||||
| 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>
#define M 20
#define N 310
int map[M][N],sum[N],tem[N];
int fin;
int n,m;
void find(int a[M][N],int b[N],int start,int cur)
{
int j,k,flag;
if (start==n)
fin = 1;
if (b[start]<1&&start<n)
{
for (j = 0;j<m;j++)
{
if (b[start]+a[j][start]==1&&j!=cur)
{
flag = 0;
for (k = 0;k<n;k++)
{
if(b[k]+a[j][k]>1)
{
flag = 1;
break;
}
}
if (flag == 0)
{
for (k = 0;k<n;k++)
{
b[k]+=a[j][k];
tem[k] = map[j][k];
a[j][k] = 0;
}
find(a,b,start+1,cur);
for (k = 0;k<n;k++)
{
b[k] -= tem[k];
a[j][k] = tem[k];
}
}
}
}
}
else if(b[start] == 1&&start<n)
find(a,b,start+1,cur);
}
int main()
{
int i,j;
while (scanf ("%d%d",&m,&n) != EOF)
{
if (m == 0||n == 0)
{
printf ("It is impossible\n");
continue;
}
memset(sum,0,sizeof(sum));
for (i = 0; i< m;i++)
for (j = 0; j< n; j++)
scanf ("%d",&map[i][j]);
for (i = 0; i< m;i++)
{
for (j = 0;j<n;j++)
{
sum[j]+=map[i][j];
}
fin = 0;
find(map,sum,0,i);
if (fin == 1)
break;
else memset(sum,0,sizeof(sum));
}
if (fin == 1)
printf ("Yes, I found it\n");
else printf ("It is impossible\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator