?? 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 + -