连连看是一种很受大家欢迎的小游戏。微软亚洲研究院的实习生们就曾经开发过一个类似的游戏——Microsoft Link-up。
上图为Microsoft Link-up的一个截图。如果用户可以把两个同样的图用线(连线拐的弯不能多于两个)连到一起,那么这两个头像就会消掉,当所有的头像全部消掉的时候,游戏成功结束。游戏头像有珍稀动物、京剧脸谱等。Microsoft Link-up还支持用户输入的图像库,微软的同事们曾经把新员工的漫画头像加到这个游戏中,让大家在游戏之余也互相熟悉起来。
假如让你来设计一个连连看游戏的算法,你会怎么做呢?要求说明:
1. 怎样用简单的计算机模型来描述这个问题?
2. 怎样判断两个图形能否相消?
3. 怎样求出相同图形之间的最短路径(转弯数最少,路径经过的格子数目最少)。
4. 怎样确定目前是处于死锁状态,如何设计算法来解除死锁?