前几天要写一程序 连连看 。上网查了很多。总结一下。
算法大致分为2种。
(1) 图的广度搜索算法(这边就不讲了)
(2)当连接两张图片的线条拐点不超过 2个的时候,此时分为3种情况。没有拐点,只有一个拐点,有两个拐点。
我们可以把连连看中的图片坐标看做是一个2维坐标,就用(x,y)坐标。红色的字体就是放图片的位置。黑色的就相当于那个边框。
(1)当图片之间没有拐点的时候,只要检测之间有咩有其他图片
(2)当有1个拐点的时候,假设两张图片的位置是(x01,y01)(x02,y02),只要找出那个拐点的坐标就可以了 (x01,y02)或(x02,y01)看看这个点是否存在
(3)当有2个拐点的时候,只要找出两个拐点的坐标就可以了。以(x01,y01)为标准,分别以这个点的左右上下方向寻找 。下面是用java 实现的代码,这个是我从程序中摘的,可能里面会有与算法无关的东西。
package com.play;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
public class alg {
/**
* @param args
*/
public static int[][] map;
private int numCol,numRow;
//路线图
private Point point1,point2,point3,point4;
private int pointX=0,pointY=0;
Point push01=new Point();
Point push02=new Point();
private int countPoint=-1;
alg(int col,int row)
{
numCol=col+2;
numRow=row+2;
map=new int[numRow][numCol];
int i,j;
for(i=0;i<numRow;i++)
for(j=0;j<numCol;j++)
map[i][j]=1;
for(i=0;i<numCol;i++)
{ map[0][i]=0;
map[numRow-1][i]=0;
}
for(i=0;i<numRow;i++)
{
map[i][0]=0;
map[i][numCol-1]=0;