连通分为3中
1.直连。
分为两种情况,一种两者之间相邻。另一种是两者之间已经没有有效的Block
2.一个折点
将两个点视为一个矩形的对角顶点,另外一对对角顶点只要有一个符合直连的情况,则符合一个折点的连通条件
3.两个折点
从图中所示,可以将两个折点的问题变成一个折点的问题。
即:
将第一个选择点作为种子点,然后沿着4个方向,在棋盘中分别搜索。
沿着一个方向,每次前进一步,判断是否为一个折点连通。如果是,则表明两个折点连通成立。当然在前进方向上如果遇到一个有效的Block,则该方向上搜索失败。
而如果沿着一个方向一直到了边界,则越过边界,找到对应的另一个折点,判断折点和两一个选择点是否水平直通即可。
该算法其实最重要的思路是,将复杂的问题,递归简化为简单的问题解答。
总的来说,判断是否连通:
源码下载地址: