http://acm.pku.edu.cn/JudgeOnline/problem?id=1915
花了一个上午.......

// 广度优先 
#include  < iostream >
using   namespace  std;
int  board[ 301 ][ 301 ];
int  result;
struct  H
{
   
int  row, col;
}
path1[ 100000 ], path2[ 100000 ];
int  a[ 8 ][ 2 =   { { - 1 2 } , { 1 2 } , { 2 1 } , { 2 - 1 } , { 1 - 2 } , { - 1 - 2 } , { - 2 - 1 } , { - 2 1 } } ;
int  GYou( int  n,  int  br,  int  bc,  int  nr,  int  nc)
{
    
int  dire;
    
int  top1,top2;
    
int  h, g, i, j;    
    
int  record;
    record 
=   0 ;
    top1 
=   1 ;
    top2 
=   0 ;
    path1[top1].row 
=  br;
    path1[top1].col 
=  bc;
    
while ( true )
    
{
             
//   if(result == 2)break;
         for (i  =   1 ; i  <=  top1; i ++ )
        
{
      
//        cout << "top1: " << top1 << " " << path1[i].row << " " << path1[i].col << endl;
             for (dire  =   0 ; dire  <   8 ; dire ++ )
            
{   
                g 
=  path1[i].row  +  a[dire][ 0 ];
                h 
=  path1[i].col  +  a[dire][ 1 ];
                
if (g  ==  nr  &&  h  ==  nc) {
                   record 
=   1 ;
                   
break ;
                }

                
if (g  >=   0 &&  g  <  n &&  h  >=   0 &&  h  <  n &&  board[g][h]  !=   1 )
                
{  
       
//               cout << "ha: " << path1[top1].row  << " " << path2[top1].col << " " << g << "  " << h << endl;
                    top2 ++ ;
                    path2[top2].row 
=  g;
                    path2[top2].col 
=  h;
                    board[g][h] 
=   1 ;
                }
 
            }
                 
        }

    
/*     cout << "board: " << top1 << endl;
        for(i = 0; i < n; i++)
        {
           for(j = 0; j < n; j++)
              cout << board[i][j];
              cout << endl;
        }
        
*/

        
if (record  ==   1 ) {
           cout 
<<   ++  result  <<  endl;
           
return   0 ;
        }

        
for (i  =   1 ; i  <=  top2; i ++ )
            path1[i] 
=  path2[i];
        top1 
=  top2;
        top2 
=   0 ;       
        result
++ ;         
    }

}

int  main()
{
    
int  n, nc, nr, bc, br;
    
int  i, j;
    
int  t;
    cin 
>>  t;
    
while (t -- )
    
{
       cin 
>>  n;
       cin 
>>  br  >>  bc;
       cin 
>>  nr  >>  nc;
       result 
=   0 ;
       
for (i  =   0 ; i  <  n; i ++ )
          
for (j  =   0 ; j  <  n; j ++ )
              board[i][j] 
=   0 ;
              board[bc][br] 
=   1 ;
       
if (br  ==  nr  &&  bc  ==  nc)
          cout 
<<  result  <<  endl;
       
else  
          GYou(n, br, bc, nr, nc);           
    }

    
return   0 ;
    
}