2010.10.07更新,我的LLK算法的c++实现

2010.10.07:
小更新,补充了main.cpp中的注释,源码重新打包上传了
=====================
很老套,又是连连看哈⊙﹏⊙b汗!
我之前有写过一个连连看算法分析的博客,并用JAVA实现了:[url]http://hexlee.iteye.com/blog/455257[/url]
这次因为有需要,重新又接触到了C++,故抱着学习C++的心态,用C++重新实现了这个算法,结果收获还是挺丰盛的:1.发现原来算法实现上的一个数组越界的BUG
2.判断可穿越条件的实现:JAVA中使用了一个接口,C++中使用了一个函数指针
3.学习了C++中的模板的使用

附件有代码打包,C++新手,代码有什么问题,欢迎指出,感激不尽。
文件说明:
Array2D.h //一个二维数组类的简单实现
Position.h //对应JAVA版中的Point,用来记录2D位置的类
LLKPathFinder.h //LLK算法实现器
main.cpp //测试

编译工具:Eclipse for c/c++
下面贴上关键代码:

template<class T> void llk::LLKPathFinder<T>::find(Position p1, Position p2) {
cout << "Finding road!" << endl;
clearStack(pathNodes);//清空
pathNodes.push(p1);
while (true) {
canConnect = _sameLineCheck(p1, p2, *array);//在同一条线上
if (canConnect)
break;
canConnect = _oneCornerCheck(p1, p2, *array);//有一个拐角
if (canConnect)
break;
canConnect = _towCornerCheck(p1, p2, *array);//有两个拐角
break;

}
if (canConnect) {
pathNodes.push(p2);
printStack(pathNodes);
}

return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值