///////////////////////////////////////// // LoadData:载入数据 // 生成当前操作状态 // 并将当状态加入搜索树中 ///////////////////////////////////////// BOOL CMain::LoadData(BOOL Adv) { if(Adv == false) { CInitDialog InitDlg; if(InitDlg.DoModal()==IDOK) { CDisplay *DispItem;DispItem = new CDisplay; m_CurrentG = 0; for(int i=0; i<MaxItem; i++) for(int j=0; j<MaxItem; j++) { this->m_Desc[i][j] = InitDlg.GetDescData(i,j); this->m_Data[i][j] = InitDlg.GetSrcData(i,j); DispItem->LoadData(m_Data[i][j],i,j); } DispItem->SetNoteType(AlReady); DispItem->SetThisIsAAnswer(); DispItem->SetCurrentG(m_CurrentG); DispItem->SetCurrentCount(0); m_CurOpItem = DispItem; m_DispList.AddTail(DispItem); return TRUE; } else return FALSE; } else { CInputAdvDlg InitDlg; if(InitDlg.DoModal()==IDOK) { CDisplay *DispItem;DispItem = new CDisplay; m_CurrentG = 0; for(int i=0; i<MaxItem; i++) for(int j=0; j<MaxItem; j++) { this->m_Desc[i][j] = InitDlg.GetDescData(i,j); this->m_Data[i][j] = InitDlg.GetSrcData(i,j); DispItem->LoadData(m_Data[i][j],i,j); } DispItem->SetNoteType(AlReady); DispItem->SetThisIsAAnswer(); DispItem->SetCurrentG(m_CurrentG); DispItem->SetCurrentCount(0); m_CurOpItem = DispItem; m_DispList.AddTail(DispItem); return TRUE; } else return FALSE; } }
////////////////////////////////// //GenerateChild: 生成子节点 // 返回值:生成子节点过程中的错误代码 ////////////////////////////////// UINT CMain::GenerateChild() { List ChildList; int m=0; for(int k=0; k<4; k++) { if(m_iMoveFlag[k] == false) continue; CDisplay *Tmp;Tmp = new CDisplay; for(int i=0; i<MaxItem; i++) for(int j=0; j<MaxItem; j++) Tmp->LoadData(m_CurOpItem); Tmp->SetCurrentG(m_CurrentG); Tmp->SetCurrentCount(m++); Tmp->SetNoteType(NotYet); Tmp->MoveBlank(k); ChildList.AddTail(Tmp); } return FindBestMoveFlag(&ChildList); }