java数据结构连连看_数据结构之应用篇(写一个连连看)

这两天因为刚辞职,在家里闲来无事,就写了一个连连看的程序.写这个程序的时候,我发现用数据结构里面的迷宫问题来解决路径问题是很有效的.

这里,我就把查找路径的代码发给大家看看阿,其实就是数据结构里的迷宫算法,呵呵.(代码也许有错,没有仔细测试过)

代码如下:

BOOL CChildView::FindPath( int i1, int j1, int i2, int j2 )

{

int  i = -1,j = -1,k = -1,dir = -1;

int  top = -1;

BOOL bfind = FALSE;

/*---------------------------------------------------*/

查找路径( 从 到 )

这里用栈来实现的,你当然也可以用其他方法了,呵呵

/*---------------------------------------------------*/

//入栈

top = top + 1;

k = m_LLK.llk_map.map_bmp[i1][j1];

m_LLK.llk_path[top].i = i1;

m_LLK.llk_path[top].j = j1;

m_LLK.llk_path[top].dir = -1;

while ( top > -1 )

{

i = m_LLK.llk_path[top].i;

j = m_LLK.llk_path[top].j;

dir = m_LLK.llk_path[top].dir;

//如果找到

if ( (j == j2 && abs(i - i2) == 1) || ( i == i2 && abs(j - j2) == 1 ) )

{

bfind = TRUE; break;

}

//选择查找路径  bfind = FALSE;  while( dir < 4 && !bfind )  {   int i3 = -1,j3 = -1;      dir = dir + 1;   //查找方向   switch( dir )   {   case 0://向上    i3 = m_LLK.llk_path[top].i - 1;    j3 = m_LLK.llk_path[top].j;    break;   case 1://向右    i3 = m_LLK.llk_path[top].i;    j3 = m_LLK.llk_path[top].j + 1;    break;   case 2://向下    i3 = m_LLK.llk_path[top].i + 1;    j3 = m_LLK.llk_path[top].j;    break;   case 3://向左    i3 = m_LLK.llk_path[top].i;    j3 = m_LLK.llk_path[top].j - 1;    break;   }      if ( i3 < 0 || j3 < 0 )   {//如果没路,换一个方向继续找    continue;   }   else   {    i = i3; j = j3;    if ( m_LLK.llk_map.map_bmp[i][j] == -1 )     {//有路,且可走     bfind = TRUE;     break;    }   }  }    if ( bfind )  {//如果有路径可走,进栈,继续找路   m_LLK.llk_path[top].dir = dir;   top = top + 1;   m_LLK.llk_path[top].i = i;   m_LLK.llk_path[top].j = j;   m_LLK.llk_path[top].dir = -1;   m_LLK.llk_map.map_bmp[i][j] = -2;  }  else  {//无路则退栈,换路走   m_LLK.llk_map.map_bmp[m_LLK.llk_path[top].i][m_LLK.llk_path[top].j] = -1;   top = top - 1;  } }  /*--------------------------*/ 恢复走过的路径的初始值 /*--------------------------*/ for ( ; top >= 0; top-- ) {  m_LLK.llk_map.map_bmp[m_LLK.llk_path[top].i][m_LLK.llk_path[top].j] = -1; } if ( !bfind ) {  m_LLK.llk_map.map_bmp[i1][j1] = k; }  return bfind;//返回TRUE表示找到}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值