⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 经典的人工智能实验8数码宽度搜索--自河工05级计算机赵丽娜
💻 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 + -