棋盘上攻击方的2个棋子(2子必须相连并主动移动其中的1个)与被攻方的1个棋子皆处在一条直线上并相邻时,被攻方的这个棋子就被消灭 每次移动后判断一下,移动后棋子的那一行和一列,判断是否可以消灭其他子 若一行中有4子或3子不连通或攻击方的子数只有一个或3个 则无法消灭任何棋子
import java.util.Scanner;
public class Main {
static int n;
static int p;
static int q;
static int cas = 0;
static int x[] = new int[15];
static int y[] = new int[15];
static int map[][] = new int[10][10];
static int dr[][] = {{0,0},{-1,0},{1,0},{0,-1},{0,1}};
public static void init() {
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
map[i][j] = 0;
x[11] = x[10] = x[9] = x[8] = 1;
x[2] = x[3] = x[4] = x[5] = 4;
x[1] = x[6] = 3;
x[12] = x[7] = 2;
y[11] = y[12] = y[1] = y[2] = 1;
y[10] = y[3] = 2;
y[9] = y[4] = 3;
y[8] = y[7] = y[6] = y[5] = 4;
for(int i = 1;i <= 12;i++)
map[x[i]][y[i]] = i;
}
public static void update() {
map[x[p]][y[p]] = 0;
x[p] += dr[q][0];
y[p] += dr[q][1];
map[x[p]][y[p]] = p;
check(1);
check(2);
}
public static void check(int t) {
int bk,wt,num,last;
bk = wt = num = last = 0;
for(int i = 1;i <= 4;i++) {
if(t == 1)
num = map[x[p]][i];
else
num = map[i][y[p]];
if(num == 0 && (i == 2 || i == 3))
return;
if(num > 6) {
if(last == 1 && wt == 1)
return;
wt++;
last = 2;
} else if(num > 0) {
if(last == 2 && bk == 1)
return;
bk++;
last = 1;
}
}
if((bk == 2 && wt == 1 && p <= 6) || (bk == 1 && wt == 2 && p > 6)) {
for(int i = 1;i <= 4;i++) {
if(t == 1)
num = map[x[p]][i];
else
num = map[i][y[p]];
if((wt == 1 && num > 6) || (bk == 1 && num <= 6))
map[x[num]][y[num]] = 0;
}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
n = cin.nextInt();
init();
for(int i = 0;i < n;i++) {
p = cin.nextInt();
q = cin.nextInt();
update();
}
System.out.println("#Case " + ++cas + ":");
for(int i = 1;i <= 4;i++) {
for(int j = 1;j <= 4;j++)
System.out.printf("%3d",map[i][j]);
System.out.println();
}
}
}
}