走迷宫 (2010-12-11 08:54)

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1072

测试输入:

 
        

 

3 3 3 2 1 1 1 1 0 1 1 3 4 8 2 1 1 0 1 1 1 0 1 0 4 1 1 0 4 1 1 0 0 0 0 0 0 1 1 1 1 4 1 1 1 3 5 8 1 2 1 1 1 1 1 4 1 0 0 0 1 0 0 1 1 4 1 0 1 1 0 1 1 0 0 0 0 3 0 1 1 1 4 1 1 1 1 1

测试输出:

4

-1

13

 

 

 

 

 

最后一个测试数据走到4向右走没走通,然后回朔,但是多把走4的那两步回掉了,高手帮忙看下~~~~~

#include
#define N 8
int juzhen[N+2][N+2],flag,temp,time,sum;
int k[4][2]={0,1,1,0,0,-1,-1,0};
void fun(int row,int col)

 int i,j;
  /* for(i=0;i<=N+1;i++){
    for(j=0;j<=N+1;j++){
     printf("%d ",juzhen[i][j]);
    }
    printf("\n");
   }
     printf("没输出  row=%d  col=%d time=%d sum=%d flag=%d\n",row,col,time,sum,flag);  printf("%d \n",juzhen[row][col]); printf("\n");
*/ if(flag) return;
 if(juzhen[row][col]==3 && time>=0){
  flag=1; return ;
 }
 if(juzhen[row][col]==4 && time>=1){
  time=6;
 }

 for(i=0;i<=3;i++){
  if(juzhen[row+k[i][0]][col+k[i][1]]!=0){
   time--;
   if(time==0){time++;return ;}
   sum++ ;
   juzhen[row][col]=0;
   fun(row+k[i][0],col+k[i][1]);
   if(!flag){
    time++;sum--;juzhen[row+k[i][0]][col+k[i][1]]=1;
   }else if(time<=0){
    flag=0;
    time++;sum--;juzhen[row+k[i][0]][col+k[i][1]]=1;
   }else{
    return ;
   }
  }
 }
}
int main()
{
 int i,j,n,m,T,si,sj;
 scanf("%d",&T);
 while(T--){
  flag=0;temp=0;time=6;sum=0;  
  scanf("%d%d",&n,&m);
  for(i=0;i<=n+1;i++){
   for(j=0;j<=m+1;j++){
    if(i==0 || j==0 || i==n+1 || j==m+1){
     juzhen[i][j]=0;
    }
    else{
     scanf("%d",&juzhen[i][j]);
    }
    if(juzhen[i][j]==2){
     si=i;sj=j;
    }
   }
  }

  fun(si,sj);
  if(flag){
   printf("%d\n",sum);
  }
  else{
   printf("-1\n"); 
  }
 }
return 0;
}

你可能感兴趣的:(走迷宫 (2010-12-11 08:54))