#P2308. Dearboy's Puzzle

Dearboy's Puzzle

题目描述

DearboyDearboy 是一位游戏爱好者。最近,他迷上了玩"连连看"游戏。这个游戏在一个由 N×MN \times M 个格子组成的棋盘上进行,棋盘上放置着许多卡片。玩家需要找到一对相同的卡片,如果这对卡片之间可以用不超过 33 条线段连接(且路径不经过其他卡片),就可以将这对卡片从棋盘上移除。(如果对"不超过 33 条线段"的含义感到困惑,可以参考下图,图中展示了一些允许的连接方式)。重复上述过程,如果能够清除所有卡片,则赢得游戏,否则输掉游戏。

如果你玩过这个游戏,可能会知道有些时候游戏是无解的,玩家注定会输。DearboyDearboy 对无解的游戏感到非常无聊,于是他向你这位著名的程序员求助,希望你能告诉他给定的游戏局面是否有解。

输入格式

输入包含多个测试用例。每个测试用例的第一行包含两个整数 NNMM2N,M102 \leq N, M \leq 10),表示游戏棋盘的尺寸。接下来的 NN 行给出棋盘的布局,每行包含 MM 个字符。字符可能是以下之一:*(表示空格)、AABBCCDD(表示卡片,意味着最多有 44 种不同的卡片)。不同的字母代表不同的卡片。相同卡片的数量可能是奇数,也可能存在多对相同的卡片。

输入以两个 00 结束。这个测试用例不需要处理。

输出格式

对于每个测试用例,如果 DearboyDearboy 能够赢得游戏,输出一行"yesyes",否则输出"nono"。

输入样例 11

6 8
********
*A**C***
**B*****
***B*D**
****D***
********
2 2
AB
BA
6 8
***A****
*A**C***
**B***C*
***B*D**
****D***
********
0 0

输出样例 11

no
no
yes

题目来源

POJ月赛 - 王艺杰