//printf("begin match:%d,%d\n",p1.x,p1.y);
int c1=map[p1.x][p1.y];
for (iy=p1.y;iy<_height;iy++){
for(ix=0;ix<_width;ix++){
//遍历查找整个图板的时候,图板中,起始点之前的图片实际已经查找过
//所以应当从图片之后的部分开始查找才有效率
//遍历的方式是逐行、每行中逐个遍历
//在第一次循环的时候,x坐标应当也是起始点的下一个,所以使用inner1来确认第一行循环
if (inner1){
ix=p1.x+1;
inner1=FALSE;
}
if(map[ix][iy] != c1){
//printf("skip:%d,%d\n",ix,iy);
//continue;
} else {
_point p2;
p2.x=ix;
p2.y=iy;
if (!havePath(p1,p2)){
//printf("No path from [%d,%d] to [%d,%d]\n",p1.x,p1.y,p2.x,p2.y);
} else {
dumpMapWithHotPoint(p1,p2);
map[p1.x][p1.y]=empty;
map[p2.x][p2.y]=empty;
//dumpMap();
return TRUE;
}
}
}
};
return FALSE;
}
//这个函数式扫描全图板,自动连连看
bool searchAllMap(){
int ix,iy;
bool noPathLeft=FALSE;
while(!noPathLeft){
noPathLeft=TRUE;
for (iy=0;iy<_height;iy++){
for(ix=0;ix<_width;ix++){
if(map[ix][iy] != empty){
_point p;
p.x=ix;
p.y=iy;
if(searchMap(p) && noPathLeft)
noPathLeft=FALSE;
}
}
}
printf("next loop...\n");
};
return TRUE;
}
//-----------------main-----------------------------
int main(int argc,char **argv){
srand((unsigned)time(NULL));
memset(map,0,sizeof(map));
setRndMap();
dumpMap();
searchAllMap();
}
运行结果会是类似这样: