本文整理汇总了C++中CHash::AddValue方法的典型用法代码示例。如果您正苦于以下问题:C++ CHash::AddValue方法的具体用法?C++ CHash::AddValue怎么用?C++ CHash::AddValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CHash
的用法示例。
在下文中一共展示了CHash::AddValue方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetSlove
UINT CEightPuzzleGame::GetSlove ()
{
int nCurValue = this->ConvertMetrixToInt ( this->bBegMetrix ) ;
int nEndValue = this->ConvertMetrixToInt ( this->bEndMetrix ) ;
vector<ITEM> Queue ; // 广搜的辅助队列
CHash Hash ; // Hash表,用于保存状态
Queue.clear () ;
Queue.push_back ( ITEM(-1,nCurValue) ) ;
Hash.AddValue ( nCurValue ) ;
int nCurIndex = 0, nTotalIndex = 1 ;
while ( nCurIndex < nTotalIndex )
{
if ( nCurIndex == 200000 )
return 0 ;
nCurValue = Queue[nCurIndex].nValue ;
for ( int i = 0; i < 4; i++ ) // 枚举4个方向
{
this->ConvertIntToCurMetrix ( nCurValue ) ;
if ( this->SingleMove ( i ) == FALSE )
continue ;
int nValue = this->ConvertMetrixToInt ( this->bCurMetrix ) ;
// 如果这个状态首次出现,则添加辅助队列并保存到hash表
if ( Hash.IsValueExist ( nValue ) == FALSE )
{
nTotalIndex ++ ;
Hash.AddValue ( nValue ) ;
Queue.push_back ( ITEM(nCurIndex,nValue) ) ;
// 达到目标状态时,提取路径,注意路径为倒序
if ( nValue == nEndValue )
{
this->PathList.clear () ;
this->PathList.push_back ( nValue ) ;
int nIndex = nCurIndex, nStep = 0 ;
while ( TRUE )
{
nStep ++ ;
this->PathList.push_back ( Queue[nIndex].nValue ) ;
if ( ( nIndex = Queue[nIndex].nIndex ) == -1 )
break ;
}
return nStep ;
}
}
}
nCurIndex++ ;
}
return 0 ;
}