资源简介
自动生成可解拼图问题,并用A*算法给出自动完成的步骤。。另外还有暴力搜索的代码
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
const int col = 3;
const int vol = 3;
//int pingtu[vol][col] = {012358647};
int pingtu[vol][col] = {021354867};
int correct[vol][col] = {012345678};
set visited;
int state_count = 0;
stack ptstack;
class ptstate{
public:
int currentCost;//当前实际代价
int guessCost;//当前实际代价+估计代价
int state;
ptstate(int _currentCost=0int _guessCost=0int _state=0):currentCost(_currentCost)guessCost(_guessCost)state(_state){};
ptstate(ptstate &_ptstate){
currentCost = _ptstate.currentCost;
guessCost = _ptstate.guessCost;
state = _ptstate.state;
}
void setState(int _currentCostint _guessCostint _state){
currentCost = _currentCost;
guessCost = _guessCost;
state = _state;
}
};
typedef struct openListEle{
ptstate pts;
openListEle *next;
openListEle *pre;//指向上一个状态,而非上一个节点
void addNext(openListEle *ole){
if(ole == NULL)
return;
ole->next = this->next;
this->next = ole;
ole->pre = this;
}
}openListEle;
//anounce
void printPingTu(int[vol][col]);
void printPingTu(int);
void getKeJiePingTu(int[vol][col]);
long long makeInt(int[vol][col]);
bool checkright(int[vol][col]int[vol][col]);
void pingtuAstar(int[vol][col]int[vol][col]);
bool pingtuSearch(int[vol][col]);
int getGuessCostBetweenTwoState(int[vol][col]int[vol][col]);
void deleteOpenListEle(openListEle*openListEle*);
//acomplish
void pingtuAstar(int pt[vol][col]int correct[vol][col]){
visited.clear();
//判断是否是正确状态
int correctStateInt = makeInt(correct);
if(correctStateInt == makeInt(pt)){
cout<<“已是正确状态“< return;
}
//初始化头节点
openListEle *openList = new openListEle;
openList->next = NULL;
openList->pre = NULL;
//将初始状态加入openlist
openListEle *startEle = new openListEle;
startEle->pts.setState(00makeInt(pt));
openList->addNext(startEle);
openListEle *finalEle = new openListEle;
finalEle = NULL;
while(true){
if(finalEle != NULL)
break;
//找到openlist中代价最小的
openListEle *minEleP = openList->next;
openListEle *minEle = NULL;
int minCost = -1;
int minElePCount = 0;
while(minEleP!=NULL){
if(minCost == -1 || minEleP->pts.guessCost minCost = minEleP->pts.guessCost;
minEle = minEleP;
}
minElePCount++;
minEleP = minEleP->next;
}
if(minEle == NULL || minEle->pre == NULL)
break;
//计算以当前状态的可变状态的guessCost
int tmpPt[vol][col];
int data = minEle->pts.state;
for(int i=vol-1;i>=0;--i){
for(int j=col-1;j>=0;--j){
tmpPt[i][j] = data%10;
data = data/10;
}
}
int zi = 0zj = 0;
for(int i=0;i for(int j=0;j if(tmpPt[i][j] == vol*col-1){
zi = i;
zj = j;
break;
}
}
int offseti[4] = {-1010};
int offsetj[4] = {010-1};
for(int i=0;i<4;++i){
int ti = zi+offseti[i];
int tj = zj+offsetj[i];
if(ti<0 |
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 23330816 2013-12-20 15:49 pingtukejie\ipch\pingtukejie-55ca292b\pingtukejie-fe7f9565.ipch
文件 3223 2013-12-17 17:12 pingtukejie\pingtukejie\pingtukejie.vcxproj
文件 940 2013-12-17 17:12 pingtukejie\pingtukejie\pingtukejie.vcxproj.filters
文件 143 2013-12-17 16:49 pingtukejie\pingtukejie\pingtukejie.vcxproj.user
文件 544 2013-12-21 11:24 pingtukejie\pingtukejie\Release\cl.command.1.tlog
文件 7044 2013-12-21 11:24 pingtukejie\pingtukejie\Release\CL.read.1.tlog
文件 294 2013-12-21 11:24 pingtukejie\pingtukejie\Release\CL.write.1.tlog
文件 1194 2013-12-21 11:24 pingtukejie\pingtukejie\Release\li
文件 2260 2013-12-21 11:24 pingtukejie\pingtukejie\Release\li
文件 454 2013-12-21 11:24 pingtukejie\pingtukejie\Release\li
文件 448 2013-12-21 11:24 pingtukejie\pingtukejie\Release\mt.command.1.tlog
文件 720 2013-12-21 11:24 pingtukejie\pingtukejie\Release\mt.read.1.tlog
文件 260 2013-12-21 11:24 pingtukejie\pingtukejie\Release\mt.write.1.tlog
文件 381 2013-12-21 11:24 pingtukejie\pingtukejie\Release\pingtukejie.exe.intermediate.manifest
文件 51 2013-12-21 11:24 pingtukejie\pingtukejie\Release\pingtukejie.lastbuildstate
文件 2754 2013-12-21 11:24 pingtukejie\pingtukejie\Release\pingtukejie.log
文件 290816 2013-12-21 11:24 pingtukejie\pingtukejie\Release\vc100.pdb
文件 803283 2013-12-21 11:24 pingtukejie\pingtukejie\Release\wq.obj
文件 7909 2013-12-21 11:24 pingtukejie\pingtukejie\wq.cpp
文件 8343552 2013-12-21 11:26 pingtukejie\pingtukejie.sdf
文件 900 2013-12-17 16:49 pingtukejie\pingtukejie.sln
..A..H. 11776 2013-12-21 11:26 pingtukejie\pingtukejie.suo
文件 19968 2013-12-21 11:24 pingtukejie\Release\pingtukejie.exe
文件 494592 2013-12-21 11:24 pingtukejie\Release\pingtukejie.pdb
目录 0 2013-12-20 15:49 pingtukejie\ipch\pingtukejie-55ca292b
目录 0 2013-12-21 11:24 pingtukejie\pingtukejie\Release
目录 0 2013-12-20 15:49 pingtukejie\ipch
目录 0 2013-12-17 17:12 pingtukejie\pingtukejie
目录 0 2013-12-21 11:24 pingtukejie\Release
目录 0 2013-12-21 11:26 pingtukejie
............此处省略3个文件信息
相关资源
- c++常见笔试试题及答案
- NOIP2018普及组C++试题答案
- C++写的商店管理系统
- 潮流计算C++程序
- 成绩管理系统VC++6.0
- C++ Primer中文第五版.zip
- FPS射击游戏《林海雪原》完整c++源代
- Microsoft Visual C++.NET技术内幕
- VC++6.0技术内幕第五版中文版+英文版
- Visual C++ 网络高级编程PDF 源代码
- Visual C++开发基于SNMP的网络管理软件
- MFC平台C++语言的小游戏代码
- C++程序设计教程(第2版).钱能(带详
- win 10解决系统缺失vc++库
- C++实现监控IP数据包
- 《C++程序设计原理与实践》第二版英
- C++ 通过FFmpeg将rtsp视频流到本地mp4文件
- C++程序设计 思想与方法 第2版 完整扫
- 期货CTP测试
- Matlab与C++混合程序设计第三版
- vc++课程设计 让计算机来猜测用户“暗
- 粒子滤波器+目标跟踪的C++实现,VS2
- Visual C++数据采集与串口通信测控应用
- Effective C++改善程序与设计的55个具体
- FFmpeg x86 x64库
- OpenGL迷宫山东大学图形学实验三
- VC++24点游戏完整程序源码
- VC++外挂框架.rar
- VC++技术内幕第五版中文pdf
- C和C++程序员面试秘笈-董山海_高清版
评论
共有 条评论