/*
连连看游戏设计:
主要包含游戏局面的状态描述,游戏规则的描述:状态的合法转移(哪些操作满足规则,经过这些操作,达到哪些状态)。自动机模型适合描述游戏设计。
如何求出相同图形之间的最短路径,最短路径的转弯数目最少,转弯数目最少时,经过格子数目尽可能少。
最短路径中:把最短路径问题的目标函数改为从一个点到另一个店的转弯次数。广度优先搜索
首先把图形A(x1,y1)压入队列,然后扩展A(x1,y1)可以直线到达的格子,假设这些格子的集合为S0,S0 =Find(x1,y1),如果图形B(x2,y2)在S0zhong ,结束搜索。
A和B可以用直线连接。
否则,低于所有S0集合中的空格子(没有图形),分别找到它们可以直线到达的格子,假设该集合为S1 = {Find(p)|p属于S0},S1包含了S0,令S1'= S1 - S0,
则S1'中的格子和图形A(x1,y1)可以通过转弯数目为1的路径连接。如果图形B在S1'中,可以用转弯数目为1的路径连接。
否则,对S1'中集合的空格子,找出可直线到达的格子集合,记为S2,S2' = S2 - S0-S1,若B在S2'ZHong,可以用转弯数为 2的路径连接。
扩展的过程中,记下每个格子从哪个格子连过来的(转弯的位置),最后图形A和B之间的路径可以绘制出来。
S1' = S1 - S0,S2' = S2 - S0 - S1,可以通过记录从图形A(x1,y1)到该格子(x,y)的转弯数目实现。开始,将所有格子(x,y)和格子A(x1,y1)之间路径的最少转弯数目Min
Crossing(