亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aidlg.cpp

?? 滑塊問題求解系統:利用深度優先搜索和廣度優先搜索解決有趣的滑塊問題求解系統。
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
			move(GetFocus()->GetDlgCtrlID() - IDC_INIT_0);
			if(getStatus(pos_begin_return) == getStatus(pos_end_return) ){
				MessageBox("恭喜成功!");
				GetMenu()->EnableMenuItem(ID_CREATE, MF_BYCOMMAND | MF_ENABLED);
			}else{
				GetMenu()->EnableMenuItem(ID_CREATE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
			}
		}
	}
}

void CAIDlg::OnBnClickedCheckHand()
{
	// TODO: 在此添加控件通知處理程序代碼
	if(display.IsWindowEnabled() && 
		IDOK != MessageBox("將要丟失搜索信息,是否確認", "確認", MB_OKCANCEL) ){
			( (CButton *)GetDlgItem(IDC_CHECK_HAND) )->SetCheck(0);
			return;
	}
	if( ( (CButton *)GetDlgItem(IDC_CHECK_HAND) )->GetCheck() ){
		if(!statusReady() ){
			MessageBox("未設置初未狀態!", "錯誤");
			( (CButton *)GetDlgItem(IDC_CHECK_HAND) )->SetCheck(0);
		}else{			
			prevstep.EnableWindow(FALSE);
			nextstep.EnableWindow(FALSE);
			recover.EnableWindow(FALSE);
			display.EnableWindow(FALSE);

			//狀態框按鈕
			( (CButton *) GetDlgItem(IDC_BUTTON_DEFAULT) )->EnableWindow(FALSE);
			( (CButton *) GetDlgItem(IDC_BUTTON_RANDOM) )->EnableWindow(FALSE);
			( (CButton *) GetDlgItem(IDC_BUTTON_HAND) )->EnableWindow(FALSE);
			( (CButton *) GetDlgItem(IDC_CHECK_BEGIN) )->EnableWindow(FALSE);
			( (CButton *) GetDlgItem(IDC_CHECK_END) )->EnableWindow(FALSE);
			( (CButton *) GetDlgItem(IDC_CHECK_NOANSWER) )->EnableWindow(FALSE);	
			
			m_byhand = gamestart = true;
			( (CButton *) GetDlgItem(IDC_BUTTON_BEGIN) )->EnableWindow(FALSE);					
			nowstatus = getStatus(pos_begin_return);
			laststatus = getStatus(pos_end_return);
			top = 0;
			path.clear();	
			path.push_back(nowstatus);
		}
	}else{
		if(path.size() > 1 && IDOK != MessageBox("將要丟失已移動過的信息,是否確認", "確認", MB_OKCANCEL) ){
			( (CButton *)GetDlgItem(IDC_CHECK_HAND) )->SetCheck(1);
			return;
		}
		m_byhand = gamestart = false;
		path.clear();
		top = -1;
		SetNowstep(0);
		//恢復狀態框按鈕
		( (CButton *) GetDlgItem(IDC_BUTTON_BEGIN) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_BUTTON_DEFAULT) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_BUTTON_RANDOM) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_BUTTON_HAND) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_CHECK_BEGIN) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_CHECK_END) )->EnableWindow(TRUE);
		( (CButton *) GetDlgItem(IDC_CHECK_NOANSWER) )->EnableWindow(TRUE);	
	}
}

void CAIDlg::OnBnClickedButtonRandom()
{
	// TODO: 在此添加控件通知處理程序代碼
	if(!path.empty() && 
		IDOK != MessageBox("將要丟失原來信息,是否確認", "確認", MB_OKCANCEL) ){		
			return;
	}
	path.clear();
	const int CHANGETIME = 10000;
	prevstep.EnableWindow(FALSE);
	nextstep.EnableWindow(FALSE);
	display.EnableWindow(FALSE);
	recover.EnableWindow(FALSE);
	srand((unsigned int) time(NULL) );
	int begin, end;
	do{
		if(m_random_begin.GetCheck()){
			int begin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
			memset(pos_begin_return, -1, sizeof(pos_begin_return));
			memset(pos_begin, -1, sizeof(pos_begin));
			for(int i = 0; i < CHANGETIME; ++i){
				int iRand = rand() % 9;
				int tmp = begin[i % 9];
				begin[i % 9] = begin[iRand];
				begin[iRand] = tmp;
			}
			for(int i = 0; i < 9; ++i){
				m_init[i].SetBitmap(NULL);
				if(begin[i]){
					m_selectval = begin[i];
					changeBitmap(m_init, select_begin, pos_begin, pos_begin_return, i);
				}
			}
			m_selectval = 0;
		}
		if(m_random_end.GetCheck()){
			int end[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
			memset(pos_end_return, -1, sizeof(pos_end_return));
			memset(pos_end, -1, sizeof(pos_end));
			for(int i = 0; i < CHANGETIME; ++i){
				int iRand = rand() % 9;
				int tmp = end[i % 9];
				end[i % 9] = end[iRand];
				end[iRand] = tmp;
			}
			for(int i = 0; i < 9; ++i){
				m_end[i].SetBitmap(NULL);
				if(end[i]){
					m_selectval = end[i];
					changeBitmap(m_end, select_end, pos_end, pos_end_return, i);
				}
			}
			m_selectval = 0;
		}
		begin = getStatus(pos_begin_return);
		end = getStatus(pos_end_return);
	}while(( (CButton *)GetDlgItem(IDC_CHECK_NOANSWER) )->GetCheck() && 
		(search->getreverse(begin) & 1) != (search->getreverse(end) & 1) );
	if( ( (CButton *)GetDlgItem(IDC_CHECK_HAND) )->GetCheck() ){
		top = 0;
		path.clear();	
		path.push_back(getStatus(pos_begin_return) );
		nowstatus = getStatus(pos_begin_return);
		laststatus = getStatus(pos_end_return);	
	}
	GetMenu()->EnableMenuItem(ID_CREATE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
	SetNowstep(0);
}


BOOL CAIDlg::statusReady(void)
{
	int i, ct;
	for(i = 0, ct = 0; i < 9; ++i){
		if(pos_begin_return[i] == -1 || pos_end_return[i] == -1)
			ct++;
	}
	return ct <= 2;
}

int CAIDlg::getStatus(int pos_return[])
{	
	for(int i = (NUM - 1), status = 0; i >= 0; --i){
		status *= 10;
		if(pos_return[i] > 0)
			status += pos_return[i];
	}
	return status;
}

void CAIDlg::SetStatus(CButton button[], CButton select[], int pos[], int pos_return[], int status){
	memset(pos, -1, sizeof(int) * NUM);
	memset(pos_return, -1, sizeof(int) * NUM);
	for(int i = 0; i < NUM; ++i){
		button[i].SetBitmap(NULL);
		if(status % 10){
			m_selectval = status % 10;
			changeBitmap(button, select, pos, pos_return, i);
		}
		status /= 10;
	}
}


void CAIDlg::OnBnClickedSearchType()
{
	// TODO: 在此添加控件通知處理程序代碼
	switch(GetFocus()->GetDlgCtrlID()){
		case IDC_RADIO_DFS:
			search_type = TYPE_DFS;
			search = &dfs;
			break;
		case IDC_RADIO_BDFS:
			search_type = TYPE_BDFS;
			search = &bdfs;
			break;
		case IDC_RADIO_BFS:
			search_type = TYPE_BFS;
			search = &bfs;
			break;
		case IDC_RADIO_TBFS:
			search_type = TYPE_TBFS;
			search = &tbfs;
			break;
		case IDC_RADIO_ASTAR1:
			search_type = TYPE_ASTAR1;
			search = &astar1;
			break;
		case IDC_RADIO_ASTAR2:
			search_type = TYPE_ASTAR2;
			search = &astar2;
			break;
		case IDC_RADIO_IDFS:
			search_type = TYPE_IDFS;
			search = &idfs;
			break;
		case IDC_RADIO_IDA:
			search_type = TYPE_IDA;
			search = &ida;
			break;			
	}	
	SetInstroduction();
}

void CAIDlg::SetInstroduction()
{
	SetDlgItemText(IDC_EDIT_INTRO, search->getIntroduction() );
}


//時間統計函數:
__int64 FileTimeToQuadWord(PFILETIME pft){
	return (Int64ShllMod32(pft->dwHighDateTime, 32) | pft->dwLowDateTime);
}



//線程執行函數:
DWORD WINAPI SearchProc(LPVOID lpParameter){
	CAIDlg *p = (CAIDlg *) lpParameter;

	int begin = p->getStatus(p->pos_begin_return);
	int end = p->getStatus(p->pos_end_return);
	if(begin == end){
		p->MessageBox("一樣的還用搜嗎?", "^-^");
		p->gamestart = false;
		//恢復狀態框按鈕
		( (CButton *) p->GetDlgItem(IDC_CHECK_HAND) )->EnableWindow(TRUE);
		( (CButton *) p->GetDlgItem(IDC_BUTTON_DEFAULT) )->EnableWindow(TRUE);
		( (CButton *) p->GetDlgItem(IDC_BUTTON_RANDOM) )->EnableWindow(TRUE);
		( (CButton *) p->GetDlgItem(IDC_BUTTON_HAND) )->EnableWindow(TRUE);
		( (CButton *) p->GetDlgItem(IDC_CHECK_BEGIN) )->EnableWindow(TRUE);
		( (CButton *) p->GetDlgItem(IDC_CHECK_END) )->EnableWindow(TRUE);
		p->SetDlgItemText(IDC_BUTTON_BEGIN, "開始搜索");
		return 0;
	}
	p->GetMenu()->EnableMenuItem(ID_CREATE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
	
	p->SetDlgItemText(IDC_EDIT_RESULT,  "搜索中……");


	//線程時間統計參數
	FILETIME ftKernelTimeStart, ftKernelTimeEnd;
	FILETIME ftUserTimeStart, ftUserTimeEnd;
	FILETIME ftDummy;
	__int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
	
	//獲取當前時間值
	GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeStart, &ftUserTimeStart);

	p->stop = 0;

	switch(p->search_type){		
		case p->TYPE_BDFS:
			p->ans = p->search->search(begin, end, p->stop, p->m_maxstep);
			break;
		case p->TYPE_DFS:	
		case p->TYPE_BFS:
		case p->TYPE_TBFS:
		case p->TYPE_IDFS:
		case p->TYPE_IDA:
			p->ans = p->search->search(begin, end, p->stop);
			break;	
		case p->TYPE_ASTAR1:
		case p->TYPE_ASTAR2:
			p->ans = p->search->search(begin, end, p->stop, p->m_heuristic);
			break;	
	}

	//結束時時間值
	GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeEnd, &ftUserTimeEnd);
	//Get the elapsed kernel and user times by 
	//converting the start and end times 
	//from FILETIMEs to quad words, and then 
	//subtract the start times from the end times.

	qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd) - FileTimeToQuadWord(&ftKernelTimeStart);

	qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd) - FileTimeToQuadWord(&ftUserTimeStart);

	//Get total time duration by adding the kernel
	//and user times.

	qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed;

	char str[30];
	sprintf(str, "時間:%.2lfms\r\n", ( (double)qwTotalTimeElapsed) / 10000);
	CString result = str;

	//搜索結果

	//顯示
	result += p->search->getResult();
	p->SetDlgItemText(IDC_EDIT_RESULT,  result);

	if(p->ans == -1 ){
		p->MessageBox("此圖無解!");		
	}else if(p->ans == -2){
		p->MessageBox("用戶終止搜索!");			
	}else if(!p->ans){
		p->MessageBox("未找到解!");
	}else{		
		p->top = 0;
		p->search->getPath(p->path);
		( (CButton *)p->GetDlgItem(IDC_BUTTON_NEXT))->EnableWindow(TRUE);
		( (CButton *)p->GetDlgItem(IDC_BUTTON_AUTO))->EnableWindow(TRUE);
		p->nextstep.EnableWindow(TRUE);
		p->recover.EnableWindow(TRUE);
		p->display.EnableWindow(TRUE);		
		p->GetMenu()->EnableMenuItem(ID_CREATE, MF_BYCOMMAND | MF_ENABLED);
	}

	//搜索結束
	p->gamestart = false;

	//恢復狀態框按鈕
	( (CButton *) p->GetDlgItem(IDC_CHECK_HAND) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_BUTTON_DEFAULT) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_BUTTON_RANDOM) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_BUTTON_HAND) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_CHECK_BEGIN) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_CHECK_END) )->EnableWindow(TRUE);
	( (CButton *) p->GetDlgItem(IDC_CHECK_NOANSWER) )->EnableWindow(TRUE);	
	p->SetDlgItemText(IDC_BUTTON_BEGIN, "開始搜索");
	return 0;
}

#ifdef TEST

DWORD WINAPI TestProc(LPVOID lpParameter){
	CAIDlg *p = (CAIDlg *) lpParameter;
	const int M = 35;
	struct Test{
		double B;
		int step;		
	}test_bfs[M], test_tbfs[M], test_a1[M], test_a2[M], test_ids[M];
	int count[M];
	memset(test_bfs, 0, sizeof(test_bfs) );
	memset(test_tbfs, 0, sizeof(test_tbfs) );
	memset(test_a1, 0, sizeof(test_a1) );
	memset(test_a2, 0, sizeof(test_a2) );
	memset(test_ids, 0, sizeof(test_ids) );
	memset(count, 0, sizeof(count) );
	for(int i = 0; i < M; ++i){
		test_bfs[i].B = test_tbfs[i].B = test_a1[i].B 
			= test_a2[i].B = test_ids[i].B = 0.;
	}
	int stop = 0;
	for(int i = 1; i <= 50000; ++i){
		p->OnBnClickedButtonRandom();
		p->SetNowstep(i);
		int begin = p->getStatus(p->pos_begin_return);
		int end = p->getStatus(p->pos_end_return);

		//bfs
		p->search = &p->bfs;
		p->search->search(begin, end, stop);
		int step = p->search->getStep();
		count[step]++;
		test_bfs[step].step += p->search->getTotalnode();
		test_bfs[step].B += p->search->getB();

		//tbfs
		p->search = &p->tbfs;
		p->search->search(begin, end, stop);			
		test_tbfs[step].step += p->search->getTotalnode();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成在人线免费| 亚洲精品欧美综合四区| 欧美亚洲自拍偷拍| av亚洲精华国产精华精华| 亚洲欧美电影一区二区| 亚洲精品一区二区精华| 欧美一区二区三区视频免费播放 | 337p粉嫩大胆色噜噜噜噜亚洲| 91影视在线播放| 成人ar影院免费观看视频| 黄色资源网久久资源365| 亚洲欧美另类小说| 日韩理论电影院| 亚洲欧美乱综合| 一区二区在线观看视频| 亚洲日本va午夜在线影院| 91在线精品一区二区三区| eeuss鲁片一区二区三区在线看| 国产成人aaa| 日本韩国欧美在线| 欧美电视剧在线观看完整版| 国产日韩亚洲欧美综合| 亚洲免费视频中文字幕| 免费精品99久久国产综合精品| 麻豆极品一区二区三区| av在线不卡电影| 日韩视频一区二区| 中文字幕在线一区免费| 视频在线观看91| aaa欧美日韩| 日韩三级精品电影久久久| 日本一区二区免费在线观看视频 | 亚洲激情图片小说视频| 人人精品人人爱| 91免费视频观看| 精品久久久久久久久久久久久久久| 国产精品丝袜久久久久久app| 亚洲成人综合在线| www.亚洲人| 精品乱人伦小说| 夜夜嗨av一区二区三区网页| 国产一区二区免费在线| 欧美人妇做爰xxxⅹ性高电影| 国产拍揄自揄精品视频麻豆| 午夜电影久久久| 99久久99久久免费精品蜜臀| 精品剧情在线观看| 香蕉乱码成人久久天堂爱免费| 国产成人免费在线| 日韩午夜精品视频| 五月开心婷婷久久| 91麻豆福利精品推荐| 国产三级欧美三级| 久久99精品网久久| 欧美亚洲一区二区三区四区| 国产精品女同一区二区三区| 九九热在线视频观看这里只有精品| 欧美日韩精品欧美日韩精品| 一区二区三区免费| k8久久久一区二区三区 | 成人污污视频在线观看| 精品免费视频一区二区| 秋霞电影一区二区| 69精品人人人人| 婷婷丁香久久五月婷婷| 精品视频一区 二区 三区| 亚洲欧洲日韩在线| a4yy欧美一区二区三区| 亚洲欧洲av色图| 99亚偷拍自图区亚洲| 国产精品国产三级国产a| 国产成人一区在线| 中文字幕欧美国产| 高清日韩电视剧大全免费| 国产日韩精品一区二区浪潮av| 国产美女精品人人做人人爽| 国产午夜亚洲精品理论片色戒| 韩国成人精品a∨在线观看| 26uuu久久天堂性欧美| 国产在线视视频有精品| 精品少妇一区二区三区免费观看 | 国产精品久久夜| 成人av网址在线| 樱花影视一区二区| 欧美电影影音先锋| 麻豆成人在线观看| 国产亚洲一本大道中文在线| 国产精品亚洲专一区二区三区| 久久精品亚洲一区二区三区浴池| 国产99久久久国产精品| 亚洲色图.com| 欧美日韩久久一区二区| 美腿丝袜亚洲综合| 国产亚洲自拍一区| 日本丰满少妇一区二区三区| 亚洲一区二区三区免费视频| 欧美xxxx老人做受| 成人激情综合网站| 性欧美疯狂xxxxbbbb| 久久影视一区二区| 99久久99久久免费精品蜜臀| 日韩在线一区二区| 国产精品无人区| 欧美日韩www| 高清国产一区二区三区| 亚洲一卡二卡三卡四卡五卡| 精品国产一区二区三区久久影院| 国产69精品一区二区亚洲孕妇| 亚洲精品中文字幕乱码三区| 日韩欧美高清一区| 色偷偷一区二区三区| 黄网站免费久久| 亚洲成a人在线观看| 久久九九久精品国产免费直播| 欧美色网一区二区| 国产成人午夜99999| 亚洲高清一区二区三区| 国产欧美一区二区三区沐欲| 欧美日韩国产高清一区二区三区| 成人一区二区三区视频| 日本不卡一区二区| 亚洲黄色性网站| 欧美国产日韩一二三区| 91精品蜜臀在线一区尤物| 99国产精品久久久久| 国产精品系列在线观看| 午夜成人免费电影| 中文字幕日韩精品一区| 国产日本欧美一区二区| 欧美大肚乱孕交hd孕妇| 欧美日韩午夜在线视频| 色综合 综合色| 成人va在线观看| 国产成人在线观看免费网站| 精品一区二区三区不卡| 日韩精品一区第一页| 一区二区三区鲁丝不卡| 中文字幕一区日韩精品欧美| 国产日本欧美一区二区| 精品国产乱码久久久久久久| 日韩亚洲欧美综合| 欧美日韩精品久久久| 欧美性xxxxxx少妇| 精品污污网站免费看| 91免费在线视频观看| 99久久99久久免费精品蜜臀| 成人h动漫精品一区二| 成人做爰69片免费看网站| 国产一区二区在线观看视频| 狠狠色丁香久久婷婷综| 狠狠色丁香婷综合久久| 国产精品小仙女| 成人综合婷婷国产精品久久免费| 国产精品亚洲一区二区三区妖精| 国产一区二区三区免费看| 国产一区欧美日韩| 成人午夜av在线| 一本大道久久a久久综合| 欧美视频在线一区二区三区| 欧美日韩一区二区在线观看视频| 欧美日韩一区不卡| 91精品国产手机| 精品国产百合女同互慰| 久久综合九色综合欧美就去吻 | 欧美日韩国产另类不卡| 在线综合+亚洲+欧美中文字幕| 欧美美女黄视频| 亚洲精品一区二区三区香蕉 | 一本一本久久a久久精品综合麻豆| 99re6这里只有精品视频在线观看| 91在线国内视频| 欧美精品第1页| 精品对白一区国产伦| 国产精品网站一区| 亚洲国产日韩一区二区| 极品美女销魂一区二区三区 | 综合分类小说区另类春色亚洲小说欧美| 国产精品久久久久久久久动漫 | 欧美a级一区二区| 国产iv一区二区三区| 欧美综合一区二区三区| 日韩一区二区三区av| 国产精品日日摸夜夜摸av| 亚洲国产视频直播| 国产suv精品一区二区883| 精品视频1区2区| 久久久亚洲精品石原莉奈| 亚洲一本大道在线| 国产九色精品成人porny| 色激情天天射综合网| 精品美女在线播放| 亚洲一区二区三区自拍| 粉嫩av一区二区三区在线播放| 欧美三级日本三级少妇99| 久久精品夜夜夜夜久久| 日韩高清在线电影| 色综合网色综合| 国产肉丝袜一区二区| 热久久一区二区| 欧美性受xxxx黑人xyx|