📄 main.cpp
字号:
//****************************************
//* 主函数 *
//* 文件名称:main.cpp *
//* 函数原型:int main(void) *
//* 功 能:综合处理8数码问题 *
//* 参 数:void *
//* 返 回 值:int *
//* 工作方式:随机生成初始状态->给定状态 *
//****************************************
#include "head.h"
#include "8-1.h"
int main()
{
cout<<"***************************************************"<<endl;
cout<<"***** 欢迎使用本程序解决8数码问题 **********"<<endl;
cout<<"***** 设计者:赵丽娜 052462 计算机051 ********"<<endl;
cout<<endl;
cout<<"********** (温馨提示:0表示空格^_^) ************"<<endl;
cout<<"*************按任意键回车游戏马上开始!*************"<<endl;
getchar();
/******************以下是随机生成的初始状态*****************/
cout << "随机的生成的初始状态如下:" << endl;
vector <int> v;
int k;
for( k=0;k<9;k++)
v.push_back(k);
srand((unsigned int)time(NULL));
random_shuffle(v.begin(),v.end());//将0-8随机排列
k=0;
for (int i=0;i<ROW;i++)
for (int j=0;j<COL;j++)
{
src.digit[i][j]=v[k];k++;
} //将随机生成的排列作为初始状态
cout<<src<<endl;
src.index=0;//父节点为空
src.outofopen=false;
/******************以下是指定的终止状态*****************/
cout<<"设定的目标状态为:"<<endl;
dest.digit[0][0]=1;
dest.digit[0][1]=2;
dest.digit[0][2]=3;
dest.digit[1][0]=8;
dest.digit[1][1]=0;
dest.digit[1][2]=4;
dest.digit[2][0]=7;
dest.digit[2][1]=6;
dest.digit[2][2]=5;
cout<<dest<<endl;
node_v.push_back(src);//初始节点放到open表中
cout<<"以下是宽度搜索:"<<endl;
cout<<"搜索中..."<<endl;
clock_t start=clock(); //记时开始
int loc=0; //容器(也可以理解为open表)中的function的最小值所在位置
while (1)
{
//if((clock()-start)/CLOCKS_PER_SEC>60)
//{cout<<"超时结束!操作失败!"<<endl;return -1;}
if (isEmptyOfOPEN())
{cout<<"在此初始状态下无解!"<<endl;return -1;}
else
{
if(isEqual(loc,dest.digit))//找到目标节点
{
vector<Node> rstep_v;//存放中间节点的容器
cout<<"搜索的中间节点和路径如下:"<<endl;
PrintSteps(loc,rstep_v);//输出中间过程
cout<< "恭喜您操作成功!" << endl;
clock_t finish=clock();
double duration=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"用时"<<duration<<"秒."<<endl; //输出所用时间
break;
}
else
{ProcessNode(loc);loc=loc+1;}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -