#P1414. Life Line

    ID: 415 传统题 2000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>模拟搜索BFS图结构图的遍历Japan 2002 Kanazawa

Life Line

题目描述

让我们来玩一个新的棋盘游戏“生命线”。

玩家数量大于1且小于10。

在这个游戏中,棋盘是一个由许多小正三角形排列而成的大正三角形(如图1所示)。每个小三角形的边长相同。 棋盘的大小由大三角形底边上的顶点数量表示。例如,图1中棋盘的大小为4。

游戏开始时,每位玩家被分配一个1到9之间的唯一识别号码,并获得一些写有自己号码的石头。

每位玩家轮流将自己的石头放在一个“空”顶点上。“空顶点”是指没有石头的顶点。

当一位玩家在自己的回合中将石头放在某个顶点时,可能会从棋盘上移除一些石头。玩家获得的分数等于他移除的自己的石头数量。玩家单回合的得分是他获得的分数减去他在该回合中失去的分数。

移除石头的条件如下:

  1. 棋盘上的石头被分成若干组。每组包含一组号码相同且相邻放置的石头。也就是说,如果相同号码的石头相邻放置,它们属于同一组。
  2. 如果一组石头中没有至少一个与“空”顶点相邻的石头,则该组所有石头将从棋盘上移除。 图2展示了石头分组的示例。

假设现在是玩家“4”的回合。如果他按照图3a所示将石头放在顶点上,将满足移除某些石头组的条件(图3b中阴影部分)。玩家获得6分,因为移除了6个其他玩家的石头(见图3c)。 再举一个例子,假设在图2中是玩家“2”的回合。如果玩家按照图4a所示将石头放在顶点上,将满足移除某些石头组的条件(图4b中阴影部分)。玩家获得4分,因为移除了4个其他玩家的石头。但同时,他失去了3分,因为移除了自己的3个石头。因此,玩家该回合的得分为4 - 3 = 1(见图4c)。

当每位玩家将所有石头放在棋盘上时,游戏结束。玩家的总得分是他所有回合得分的总和。

你的任务是编写一个程序,计算当前回合玩家可以获得的最大得分(即他获得的分数减去他失去的分数)。

输入格式

输入包含多组数据。每组数据表示游戏进行中的棋盘状态。每组数据的格式如下:

NN CC

S1,1S_{1,1}

S2,1S_{2,1} S2,2S_{2,2}

S3,1S_{3,1} S3,2S_{3,2} S3,3S_{3,3}

...

SN,1S_{N,1} ... SN,NS_{N,N}

其中: • NN 是棋盘的大小(3N103 \leq N \leq 10)。

CC 是当前回合玩家的识别号码(1C91 \leq C \leq 9)。即,你的程序需要计算他在该回合的得分。

Si,jS_{i,j} 是棋盘上顶点的状态(0Si,j90 \leq S_{i,j} \leq 9)。如果 Si,jS_{i,j} 为正数,表示该顶点有一个编号为 Si,jS_{i,j} 的石头;如果 Si,jS_{i,j} 为0,表示该顶点是“空”的。

输入以两个0(即 00 00)结束。

输出格式

对于每组数据,输出当前回合玩家可以获得的最大得分,每个结果占一行。

输入样例1

4 4
   2
  2 3
 1 0 4
1 1 4 0
4 5
   2
  2 3
 3 0 4
1 1 4 0
4 1
   2
  2 3
 3 0 4
1 1 4 0
4 1
   1
  1 1
 1 1 1
1 1 1 0
4 2
   1
  1 1
 1 1 1
1 1 1 0
4 1
   0
  2 2
 5 0 7
0 5 7 0
4 2
   0
  0 3
 1 0 4
0 1 0 4
4 3
   0
  3 3
 3 2 3
0 3 0 3
4 2
   0
  3 3
 3 2 3
0 3 0 3
6 1
     1
    1 2
   1 1 0
  6 7 6 8
 0 7 6 8 2
6 6 7 2 2 0
5 9
    0
   0 0
  0 0 0
 0 0 0 0
0 0 0 0 0
5 3
    3
   3 2
  4 3 2
 4 4 0 3
3 3 3 0 3
0 0

输出样例1

6
5
1
-10
8
-1
0
1
-1
5
0
5

来源

Japan 2002 Kanazawa