1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
gw7_search,btspreadsearch,elasticsearch,search,windowssearch,p2psearch,iresearch,btsearch,search.yhd.comv,torrentsearch

程序设计实习2007 * 程序设计实习2007 * case l: if( nZeroPos % 3 == 0) return -1; else { szTmp[nZeroPos] = szTmp[nZeroPos -1]; szTmp[nZeroPos -1 ] = 0; } break; case r: if( nZeroPos % 3 == 2) return -1; else { szTmp[nZeroPos] = szTmp[nZeroPos + 1]; szTmp[nZeroPos + 1 ] = 0; } break; } return NineToTen(szTmp); } bool Bfs(int nStatus) { int nNewStatus; nQHead = 0; nQTail = 1; MyQueue[nQHead] = nStatus; while ( nQHead != nQTail) { //队列不为空 nStatus = MyQueue[nQHead]; if( nStatus == nGoalStatus ) {//找到目标状态 return true; } for( int i = 0;i 4;i ++ ) { //尝试4种移动 nNewStatus = NewStatus(nStatus,sz4Moves[i]); if( nNewStatus == -1 ) continue; //不可移,试下一种移法 int nByteNo = nNewStatus / 8; int nBitNo = nNewStatus % 8; if( GetBit( szFlag[nByteNo],nBitNo)) continue; //如果扩展标记已经存在, //则不能入队 //设上已扩展标记 SetBit( szFlag[nByteNo],nBitNo,1); //新节点入队列 MyQueue[nQTail] = nNewStatus; anFather[nQTail] = nQHead; //记录父节点 //记录本节点是由父节点经什么动作而来 szMoves[nQTail] = sz4Moves[i]; nQTail ++; } nQHead ++; } return false; } int main() { nGoalStatus = NineToTen(123456780); memset(szFlag,0,sizeof(szFlag)); char szLine[50]; char szLine2[20]; cin.getline(szLine,48); int i,j; //将输入的原始字符串变为九进制字符串 for( i = 0, j = 0; szLine[i]; i ++ ) { if( szLine[i] != ) { if( szLine[i] == x ) szLine2[j++] = 0; else szLine2[j++] = szLine[i]; } } szLine2[j] = 0; if( Bfs(NineToTen(szLine2))) { int nMoves = 0; int nPos = nQHead; do { szResult[nMoves++] = szMoves[nPos]; nPos = anFather[nPos]; } while( nPos); for( int i = nMoves -1; i = 0; i -- ) { cout szResult[i]; } } else cout unsolvable endl; } 用深搜解决本题不好,如用递归实现,不作特殊处理的话,很容易就导致递归层数太多而栈溢出 可以不写递归,自己用大数组实现一个栈。这可以避免栈溢出。但是可能导致输出结果的步数太多(几万步),这样交到POJ上会 Output limit exceeded 如果运气很坏,也可能数组会不够用 用深搜解决八数码问题 广搜与深搜的比较 广搜一般用于状态表示比较简单、求最优策略的问题 需要保存所有扩展出的状态,占用的空间大 每次扩展出结点时所走过的路径均是最短路 深搜几乎可以用于任何问题 只需要保存从起始状态到当前状态

文档评论(0)

mydoc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档