| ||||||||||
| 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 | |||||||||
哪位大牛帮忙看看我写的枚举,已经交了快20遍了#include<stdio.h>
static int a[65535][2],na,vv[16],c[4][4],flips[16];
int chang(int a[4][4],int vv[16])
{int i,j,k;
k=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
k+=a[i][j]*vv[i*4+j];
return(k);
}
void tryy(int i,int j,int k);
main()
{int i,j,n,m,aa,bb;
char s[4];int pp[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
vv[0]=1;
for(i=1;i<16;i++)
vv[i]=vv[i-1]*2;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
c[i][j]=0;
for(i=0;i<16;i++)
{aa=i/4;bb=i%4;
c[aa][bb]=1;
for(j=0;j<4;j++)
if((aa+pp[j][0]>=0)&&(aa+pp[j][0]<=3)
&&(bb+pp[j][1]>=0)&&(bb+pp[j][1]<=3))
c[aa+pp[j][0]][bb+pp[j][1]]=1;
flips[i]=chang(c,vv);
c[aa][bb]=0;
for(j=0;j<4;j++)
if((aa+pp[j][0]>=0)&&(aa+pp[j][0]<=3)
&&(bb+pp[j][1]>=0)&&(bb+pp[j][1]<=3))
c[aa+pp[j][0]][bb+pp[j][1]]=0;
}
m=0;
for(i=0;i<4;i++)
{scanf("%s",s);
for(j=0;j<4;j++)
if(s[j]=='p')
m+=vv[i*4+j];
}
na=-1;
tryy(m,1,0);
n=20;
for(i=0;i<na+1;i++)
{if((a[i][0]==0)||(a[i][0]==65535))
if(a[i][1]<n)n=a[i][1];
}
if(n<20)printf("n=%d\n",n);
else printf("Impossible\n");
}
void tryy(int i,int j,int k)
{
if(j>16){na++;a[na][0]=i;a[na][1]=k;return;}
tryy(i^flips[j],j+1,k+1);
tryy(i,j+1,k);
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator