0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 2 0 0 0
0 0 0 2 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1
#include<iostream>
#include<math.h>
using namespace std;
int map[8][8] = {0} ;
//1234左下右上 5678 左上 左下 右下 右上
int a[100] = {0} ;
int dr[8]={0,-1,-1,-1,0,1,1,1};
int dc[8]={-1,-1,0,1,1,1,0,-1};
int r , c , color, counter = 0 , flag = 0 ;
void input() ;
int judge() ;
void output();
int main()
{
input() ;
output() ;
return 0 ;
}
void input()
{
int i , j , k , l;
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < 8 ; j++)
{
cin >> map[i][j] ;
}
}
cin >> color ;
for(k = 0 ; k < 8 ; k++)
{
for(l = 0 ; l < 8 ; l++)
{
r = k ;
c = l ;
if(judge())
{
counter++ ;
a[counter] = flag ;
flag = 0 ;
}
}
}
}
int judge ()
{
int i , j , x , y ;
//相邻的为对方棋子
if(map[r][c] != 0)
{
return 0 ;
}
for(i=0;i<8;i++)
{
x=r+dr[i];//r c 是定点 不能用x y一直替换
y=c+dc[i];
if(x>=8||y>=8||x<0||y<0||map[x][y]!=3-color)//相邻的不能越界且是对方棋子
{
continue;
}
else
{
while(x>=0&&y<8&&x>=0&&y<8)//不越界
{
x = x + dr[i] ;
y = y + dc[i] ;
if(map[x][y]==0)//相邻的相邻的是0
{
break;
}
if(map[x][y]==color)
{
if(abs(x-r) > 0)
{
flag = flag + abs(x-r) ;
}
else
{
flag = flag + abs(y-c) ;
}
break;
}
}
}
}
if(flag > 0 )
{
flag = flag*100 + r * 10 + c ;//用一个数存储三个数据
return 1 ;
}
return 0 ;
}
void output()
{
int i , j , max1 = 0 , min1 = 100 ;
int b[100] = {0} , c[100] = {0} ;
for(i = 1 ; i <= counter ; i++)
{
b[i] = a[i]/100 ; //用b存己方子数
if(b[i] > max1)
{
max1 = b[i];//找出最大值
}
}
for(j = 1 ; j <= counter ; j++)
{
if(b[j] == max1)
{
if(a[j]%100 < min1 )
{
min1 = a[j]%100 ;
}
}
}
if(min1 == 100)
{
cout << "Impossible" << endl ;
}
else
{
cout << min1 / 10 << ' ' << min1 % 10 << endl ;
}
}