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++
下面贴上关键代码:
小更新,补充了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;
}