⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findpath.cpp

📁 模拟连连看看的程序源代码。 可运行的。
💻 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 + -