`

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

阅读更多
2010.10.07:
小更新,补充了main.cpp中的注释,源码重新打包上传了
=====================
很老套,又是连连看哈⊙﹏⊙b汗!
我之前有写过一个连连看算法分析的博客,并用JAVA实现了:http://hexlee.iteye.com/blog/455257
这次因为有需要,重新又接触到了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;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics