📄 findpath.cpp
字号:
// zg2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include"findpath.h"
int mymap[yLine][xLine];
CPoint line1,line2;
CPoint tmp1,tmp2;
void findxline(const CPoint &p,CPoint &line)
{
int tmp;
//tmp=p.x;
tmp=p.x;
if(tmp==0)
line.x=p.x;
else
{
while(mymap[p.y][tmp-1]==0)
{
tmp--;
if(tmp==0)
break;
}
line.x=tmp;
}
tmp=p.x;
if(tmp==xLine-1)
line.y=p.x;
else
{
while(mymap[p.y][tmp+1]==0)
{
tmp++;
if(tmp==xLine-1)
break;
}
line.y=tmp;
}
}
void findyline(const CPoint &p,CPoint &line)
{
int tmp;
tmp=p.y;
if(tmp==0)
line.x=p.y;
else
{
while(mymap[tmp-1][p.x]==0)
{
tmp--;
if(tmp==0)
break;
}
line.x=tmp;
}
tmp=p.y;
if(tmp==yLine-1)
line.y=p.y;
else
{
while(mymap[tmp+1][p.x]==0)
{
tmp++;
if(tmp==yLine-1)
break;
}
line.y=tmp;
}
}
bool isxpath(const CPoint &p1,const CPoint &p2)
{
int t=mymap[p1.y][p1.x];
int left,right,y1,y2;
bool findresult=true;
findxline(p1,line1);
findxline(p2,line2);
left=line1.x>line2.x?line1.x:line2.x;
right=line1.y<line2.y?line1.y:line2.y;
if(left>right)
return false;
if(p1.y<p2.y)
{
y1=p1.y;
y2=p2.y;
}
else
{
y1=p2.y;
y2=p1.y;
}
for(int x=left;x<=right;x++)
{
findresult=true;
for(int y=y1+1;y<=y2-1;y++)
{
if(mymap[y][x]!=0)
{
findresult=false;
break;
}
}
if(findresult)
return true;
}
return false;
}
bool isypath(const CPoint &p1,const CPoint &p2)
{
int t=mymap[p1.y][p1.x];
int left,right,x1,x2;
bool findresult=true;
findyline(p1,line1);
findyline(p2,line2);
left=line1.x>line2.x?line1.x:line2.x;
right=line1.y<line2.y?line1.y:line2.y;
if(left>right)
return false;
if(p1.x<p2.x)
{
x1=p1.x;
x2=p2.x;
}
else
{
x1=p2.x;
x2=p1.x;
}
for(int y=left;y<=right;y++)
{
findresult=true;
for(int x=x1+1;x<=x2-1;x++)
{
if(mymap[y][x]!=0)
{
findresult=false;
break;
}
}
if(findresult)
return true;
}
return false;
}
bool ispath(const CPoint &p1,const CPoint &p2)
{
if(p1.x==p2.x)
return isxpath(p1,p2);
else if(p1.y==p2.y)
return isypath(p1,p2);
else if(isxpath(p1,p2))
{
return true;
}
else
return isypath(p1,p2);
}
bool handleij(int i,int j,int &oi,int &oj)
{
tmp1.x=i;
tmp1.y=j;
for(oj=j;oj<yLine;oj++)
{
if(oj==j)
oi=i+1;
else
oi=0;
for(;oi<xLine;oi++)
{
if(mymap[oj][oi]==mymap[j][i])
{
tmp2.x=oi;
tmp2.y=oj;
if(ispath(tmp1,tmp2))
return true;
}
}
}
return false;
}
bool mystart(int &x1,int &y1,int &x2,int &y2)
{
int t1,t2;
CPoint p1,p2;
for(int j=0;j<yLine;j++)
{
for(int i=0;i<xLine;i++)
{
if(mymap[j][i]!=0)
{
if(handleij(i,j,t1,t2))
{
// mymap[j][i]=mymap[t2][t1]=0;
x1=i;y1=j;
x2=t1;y2=t2;
//cout<<i<<" "<<j<<" !!! "<<t1<<" "<<t2<<endl;
return true;
}
}
}
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -