//如果相邻
if( ( p1.x+1==p2.x && p1.y==p2.y )
|| ( p1.x==p2.x && p1.y+1==p2.y )
|| ( p1.x-1==p2.x && p1.y==p2.y )
|| ( p1.x==p2.x && p1.y-1==p2.y ) )
{
//把路径记录下来
//起点
way[0].x=p1.x;
way[0].y=p1.y;
//直线转折点为0
way[1].x=0;
way[1].y=0;
way[2].x=0;
way[2].y=0;
//终点
way[3].x=p2.x;
way[3].y=p2.y;
return true;
}
//直线连通
//如果在水平方向上
if( p1.x==p2.x )
{
if(p1.y>p2.y)
{
temp=p1.y;
p1.y=p2.y;
p2.y=temp;
}
for(j=p1.y+1; j<p2.y; j++ )
{
if( matrix[p1.x][j]!=0)
{
break;
}
}
//如果两点之间相通
if(j==p2.y && matrix[p1.x][j-1]==0 )
{
//把路径记录下来
//起点
way[0].x=p1.x;
way[0].y=p1.y;
//直线转折点为0
way[1].x=0;
way[1].y=0;
way[2].x=0;
way[2].y=0;
//终点
way[3].x=p2.x;
way[3].y=p2.y;
return true;
}
}
//如果在垂直方向上
if( p1.y==p2.y )
{
if(p1.x>p2.x)
{
temp=p1.x;
p1.x=p2.x;
p2.x=temp;
}
for(i=p1.x+1; i<p2.x; i++ )
{
if( matrix[i][p1.y]!=0)
{
break;
}
}
//如果两点之间相通
if(i==p2.x && matrix[i-1][p1.y]==0 )
{
//把路径记录下来
//起点
way[0].x=p1.x;
way[0].y=p1.y;
//直线转折点为0
way[1].x=0;
way[1].y=0;
way[2].x=0;
way[2].y=0;
//终点
way[3].x=p2.x;
way[3].y=p2.y;
return true;
}
}
//折线连通
/*if( p1.x!=p2.x && p1.y!=p2.y)
{*/
if(p1.y>p2.y)
{
//两点交换
temp=p1.x;
p1.x=p2.x;
p2.x=temp;
temp=p1.y;
p1.y=p2.y;
p2.y=temp;
}
//横向扫描
for(i=0;i<=M-1;i++)
{
x_across=true;
//是否水平连通
for(j=p1.y+1; j<=p2.y-1; j++ )
{
if(matrix[i][j]!=0 )
{
x_across=false;
break;
}
}
if(matrix[i][p1.y]!=0 )
{
if( i!=p1.x )
x_across=false;
}
if(matrix[i][p2.y]!=0 )
{
if( i!=p2.x )
x_across=false;
}
if(x_across)
{//水平连通才执行下面
/* for(j=1; j<N-2; j++ )
{*/
//检验在垂直上是否连通
px1=px2=i;
py1=p1.y;
py2=p2.y;
while( px1!=p1.x || px2!=p2.x )
{
//如果当前点不空且不为p1点,就跳出循环,从下一行开始检测
if( matrix[px1][py1]!=0 && (px1!=p1.x || py1!=p1.y) )
break;
//如果当前点不空且不为p2点,就跳出循环,从下一行开始检测
if( matrix[px2][py2]!=0 && (px2!=p2.x || py2!=p2.y) )
break;