ACM PKU Camelot http://poj.org/problem?id=1178

#include <iostream>
//#include <queue>
using namespace std;

// queue <code> myqueue;

int flag[64][8][8];
int shore[64];
char encode[64];
int count = 0;

bool charge (int a, int b)
{
if (a >= 0 && b >= 0 && a < 8 && b < 8)
   return true ;
else 
   return false;
}

void init (int c , int a , int b )
{
flag[c][a][b] = count;
if ((flag[c][a][b]==0) && charge(a , b))
{
   init (c, a-1, b-2);
   init (c, a-2, b-1);
   init (c, a-2, b+1);
  
   init (c, a-1, b+2);
   init (c, a+1, b-2);
  
   init (c, a+2, b-1);
   init (c, a+2, b+1);
   init (c, a+1, b+2); 
   count++;
}
}

void initk (int c , int a , int b )
{
flag[c][a][b] = count;
if ((flag[c][a][b]==0) && charge(a , b))
{
   initk (c, a-1, b-1);
   initk (c, a-1, b);
   initk (c, a-1, b+1);
  
   initk (c, a, b-1);
   initk (c, a, b+1);
  
   initk (c, a+1, b-1);
   initk (c, a+1, b);
   initk (c, a+1, b+1);
   count++;
}
}

int main ()
{
int i,j,k;
memset(flag, 0, sizeof (flag));
memset(shore,0,sizeof(shore));
gets (encode);
    int figures = strlen(encode) / 2;
for (i = 0 ; i < figures ; i++)
{
   int a = encode[2*i] - 'A';
   int b = encode[2*i+1] - '1';
   int c = a + b ;
   shore[i] = c ;
   count = 0;
   if (i == 0)   initk (c, a, b);
   else   init(c, a, b);
}
int sum = 999;
for (i = 0; i < 8 ;i++)
   for (j = 0;j < 8;j++)
   {
    int temp = 0;
    for (k = 0 ; k< figures; k++)
    {
    
     temp += flag[i][j][k];
    }
    if (temp < sum)
     sum = temp;
   }
   cout << sum << endl;
   return 0;
}

posted on 2011-05-06 18:59  _Clarence  阅读(154)  评论(0编辑  收藏  举报

导航