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 |
头在1,1的case考虑了吗?In Reply To:Re:救命啊,老是哇,检查半天都看不出错. Posted by:timeloop at 2008-09-07 20:49:39 > 忘了输出case了,改成这样还是WA. > #include <stdio.h> > #include <string.h> > int n,m,l; > bool hash [21][21][4][4][4][4][4][4][4];//0表示上,1表下,2表左,3表右 > struct ss > { > int x; > int y; > }szb[8],tmp9[8]; > int map[21][21]; > struct zt > { > int x; > int y; > int b[7]; > int cnt; > }dl[1400000],tmp1,tmp2,tmp3; > void in(struct zt a) > { > hash[a.x][a.y][a.b[0]][a.b[1]][a.b[2]][a.b[3]][a.b[4]][a.b[5]][a.b[6]]=1; > } > > void in1(struct zt &a,struct zt &b) > { > int i; > a.x=b.x; > a.y=b.y; > for(i=0;i<7;i++) > a.b[i]=b.b[i]; > } > void fj(struct zt a) > { > int i; > tmp9[0].x=a.x; > tmp9[0].y=a.y; > > for(i=1;i<l;i++) > { > if(a.b[i-1]==0) > { > tmp9[i].x=tmp9[i-1].x-1; > tmp9[i].y=tmp9[i-1].y; > } > else if(a.b[i-1]==1) > { > tmp9[i].x=tmp9[i-1].x+1; > tmp9[i].y=tmp9[i-1].y; > } > else if(a.b[i-1]==2) > { > tmp9[i].x=tmp9[i-1].x; > tmp9[i].y=tmp9[i-1].y-1; > } > else if(a.b[i-1]==3) > { > tmp9[i].x=tmp9[i-1].x; > tmp9[i].y=tmp9[i-1].y+1; > } > } > for(i=0;i<l;i++) > { > map[tmp9[i].x][tmp9[i].y]=1; > } > } > void ffj(struct zt a) > { > int i; > for(i=0;i<l;i++) > { > map[tmp9[i].x][tmp9[i].y]=0; > } > } > bool check(int x,int y) > { > if(x<1||x>n) > return 0; > if(y<1||y>m) > return 0; > if(map[x][y]==1) > return 0; > return 1; > } > bool check1(struct zt a) > { > return hash[a.x][a.y][a.b[0]][a.b[1]][a.b[2]][a.b[3]][a.b[4]][a.b[5]][a.b[6]]; > } > bool checkend(int x,int y) > { > if(x==1&&y==1) > return 1; > return 0; > } > > int main() > { > int i,j,k,k1,t1,t2,bg,ed,tag,cnt2; > cnt2=1; > while(scanf("%d%d%d",&n,&m,&l)!=EOF) > { > if(n==0&&m==0&&l==0) > break; > for(i=0;i<l;i++) > scanf("%d%d",&szb[i].x,&szb[i].y); > memset(map,0,sizeof(map)); > scanf("%d",&k1); > for(i=0;i<k1;i++) > { > scanf("%d%d",&t1,&t2); > map[t1][t2]=1; > } > memset(hash,0,sizeof(hash)); > tag=0; > tmp1.x=szb[0].x; > tmp1.y=szb[0].y; > if(szb[0].x==1&&szb[0].y==1) > { > printf("0\n"); > continue; > } > for(i=0;i<l-1;i++) > { > if(szb[i+1].x==szb[i].x) > { > if(szb[i+1].y>szb[i].y) > tmp1.b[i]=3; > else > tmp1.b[i]=2; > } > else if(szb[i+1].y==szb[i].y) > { > if(szb[i+1].x>szb[i].x) > tmp1.b[i]=1; > else > tmp1.b[i]=0; > } > } > for(i=l-1;i<7;i++) > tmp1.b[i]=0; > tmp1.cnt=0; > in1(dl[0],tmp1); > in(tmp1); > dl[0].cnt=0; > bg=0; > ed=1; > while(bg!=ed) > { > in1(tmp2,dl[bg]); > tmp2.cnt=dl[bg].cnt; > fj(tmp2); > if(check(tmp2.x+1,tmp2.y)) > { > tmp3.x=tmp2.x+1; > tmp3.y=tmp2.y; > tmp3.b[0]=0; > for(i=1;i<l-1;i++) > tmp3.b[i]=tmp2.b[i-1]; > for(i=l-1;i<7;i++) > tmp3.b[i]=0; > if(!check1(tmp3)) > { > in1(dl[ed],tmp3); > dl[ed].cnt=tmp2.cnt+1; > in(tmp3); > if(checkend(tmp3.x,tmp3.y)) > { > tag=1; > break; > } > ed=(ed+1)%1400000; > > } > > } > if(check(tmp2.x-1,tmp2.y)) > { > tmp3.x=tmp2.x-1; > tmp3.y=tmp2.y; > tmp3.b[0]=1; > for(i=1;i<l-1;i++) > tmp3.b[i]=tmp2.b[i-1]; > for(i=l-1;i<7;i++) > tmp3.b[i]=0; > if(!check1(tmp3)) > { > in1(dl[ed],tmp3); > dl[ed].cnt=tmp2.cnt+1; > in(tmp3); > if(checkend(tmp3.x,tmp3.y)) > { > tag=1; > break; > } > ed=(ed+1)%1400000; > > } > > } > if(check(tmp2.x,tmp2.y+1)) > { > tmp3.x=tmp2.x; > tmp3.y=tmp2.y+1; > tmp3.b[0]=2; > for(i=1;i<l-1;i++) > tmp3.b[i]=tmp2.b[i-1]; > for(i=l-1;i<7;i++) > tmp3.b[i]=0; > if(!check1(tmp3)) > { > in1(dl[ed],tmp3); > dl[ed].cnt=tmp2.cnt+1; > in(tmp3); > if(checkend(tmp3.x,tmp3.y)) > { > tag=1; > break; > } > ed=(ed+1)%1400000; > > } > > } > if(check(tmp2.x,tmp2.y-1)) > { > tmp3.x=tmp2.x; > tmp3.y=tmp2.y-1; > tmp3.b[0]=3; > for(i=1;i<l-1;i++) > tmp3.b[i]=tmp2.b[i-1]; > for(i=l-1;i<7;i++) > tmp3.b[i]=0; > if(!check1(tmp3)) > { > in1(dl[ed],tmp3); > dl[ed].cnt=tmp2.cnt+1; > in(tmp3); > if(checkend(tmp3.x,tmp3.y)) > { > tag=1; > break; > } > ed=(ed+1)%1400000; > > } > > } > ffj(tmp2); > bg=(bg+1)%1400000; > } > /* for(i=0;i<ed;i++) > printf("%d\n",dl[i].cnt);*/ > printf("Case %d: ",cnt2); > if(tag) > printf("%d\n",dl[ed].cnt); > else > printf("-1\n"); > cnt2++; > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator