• 大小: 5.16MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: C/C++
  • 标签: 智力拼图  A*  C++  

资源简介

自动生成可解拼图问题,并用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\link.command.1.tlog

     文件       2260  2013-12-21 11:24  pingtukejie\pingtukejie\Release\link.read.1.tlog

     文件        454  2013-12-21 11:24  pingtukejie\pingtukejie\Release\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论