} else break; } //search direction 2 for(i=p1.y-1;i>-1;i--){ if (map[p1.x][i] == empty){ _point c1; c1.x=p1.x; c1.y=i; _point d1=havePathCorner1(c1,p2); if (d1.x != -1){ r[0].x=c1.x; r[0].y=c1.y; r[1].x=d1.x; r[1].y=d1.y; return r; } } else break; } //search direction 3 for(i=p1.x+1;i<_width;i++){ if (map[i][p1.y] == empty){ _point c1; c1.x=i; c1.y=p1.y; _point d1=havePathCorner1(c1,p2); if (d1.x != -1){ r[0].x=c1.x; r[0].y=c1.y; r[1].x=d1.x; r[1].y=d1.y; return r; } } else break; } //search direction 4 for(i=p1.x-1;i>-1;i--){ if (map[i][p1.y] == empty){ _point c1; c1.x=i; c1.y=p1.y; _point d1=havePathCorner1(c1,p2); if (d1.x != -1){ r[0].x=c1.x; r[0].y=c1.y; r[1].x=d1.x; r[1].y=d1.y; return r; } } else break; } r[1].x=r[0].x=r[0].y=r[1].y=-1; return r; } //汇总上面的3种情况,查找两个点之间是否存在合法连接 bool havePath(_point p1,_point p2){ if (havePathCorner0(p1,p2)){ printf("[%d,%d] to [%d,%d] have a direct path.\n",p1.x,p1.y,p2.x,p2.y); return TRUE; } _point r=havePathCorner1(p1,p2); if (r.x != -1){ printf("[%d,%d] to [%d,%d] have a 1 cornor path throught [%d,%d].\n", p1.x,p1.y,p2.x,p2.y,r.x,r.y); return TRUE; } _point *c=havePathCorner2(p1,p2);   |