compare_second.cpp

来自「滑块问题求解系统:利用深度优先搜索和广度优先搜索解决有趣的滑块问题求解系统。」· C++ 代码 · 共 122 行

CPP
122
字号
// Compare_second.cpp : 实现文件
//

#include "stdafx.h"
#include "AI.h"
#include "Compare_second.h"
#include ".\compare_second.h"


// CCompare_second 对话框

IMPLEMENT_DYNAMIC(CCompare_second, CDialog)
CCompare_second::CCompare_second(CWnd* pParent /*=NULL*/)
	: CDialog(CCompare_second::IDD, pParent)
{	
	for(int i = 1, j = IDC_STEP_A1_1, m = IDC_NODE_A1_1, k = IDC_KEY_A1_1; 
					i <= 8; ++i, ++j, ++m, ++k){		
		comp_1[i].step_item = j;
		comp_1[i].node_item = m;
		comp_1[i].key_item = k;
	}

	for(int i = 1, j = IDC_STEP_A2_1, m = IDC_NODE_A2_1, k = IDC_KEY_A2_1; 
					i <= 8; ++i, ++j, ++m, ++k){		
		comp_2[i].step_item = j;
		comp_2[i].node_item = m;
		comp_2[i].key_item = k;
	}

	m_her[1] = 1;
	m_her[2] = 2;
	m_her[3] = 4;
	m_her[4] = 8;
	m_her[5] = 16;
	m_her[6] = 25;
	m_her[7] = 36;
	m_her[8] = 48;
}

CCompare_second::~CCompare_second()
{
}

void CCompare_second::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CCompare_second, CDialog)
	ON_BN_CLICKED(IDC_COMP_SEARCH, OnBnClickedCompSearch)
END_MESSAGE_MAP()


// CCompare_second 消息处理程序


//线程执行函数:

DWORD WINAPI CompSearchProc_second(LPVOID lpParameter){
	CCompare_second *p = (CCompare_second *) lpParameter;

	p->stop = 0;

	//搜索、显示
	char s[10];
	for(int i = 1; i <= 8 && !p->stop; ++i){	
		
		//A*1
		p->search = &p->astar1;
		p->search->search(p->m_begin, p->m_end, p->stop, p->m_her[i]);
		p->SetDlgItemInt(p->comp_1[i].step_item, p->search->getStep() );
		p->SetDlgItemInt(p->comp_1[i].node_item, p->search->getTotalnode() );		
		sprintf(s, "%.3lf", p->search->getB() );
		p->SetDlgItemText(p->comp_1[i].key_item, s);

		//A*2
		p->search = &p->astar2;
		p->search->search(p->m_begin, p->m_end, p->stop, p->m_her[i]);
		p->SetDlgItemInt(p->comp_2[i].step_item, p->search->getStep() );
		p->SetDlgItemInt(p->comp_2[i].node_item, p->search->getTotalnode() );		
		sprintf(s, "%.3lf", p->search->getB() );
		p->SetDlgItemText(p->comp_2[i].key_item, s);
		
	}
	
	p->SetDlgItemText(IDC_COMP_SEARCH, "开始搜索");
	
	return 0;
}


void CCompare_second::OnBnClickedCompSearch()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	if(GetDlgItemText(IDC_COMP_SEARCH, str), str == "停止搜索"){
		stop = 1;
		return;
	}

	SetDlgItemText(IDC_COMP_SEARCH, "停止搜索");

	HANDLE hThread1 = CreateThread(NULL, 0, CompSearchProc_second, this, 0, NULL);
	CloseHandle(hThread1);
}


BOOL CCompare_second::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化

	for(int i = 1, j = IDC_HER_1; i <= 8; ++i, ++j){		
		SetDlgItemInt(j, m_her[i]);	
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?