程序设计实习(II) 算法设计广度优先搜索.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Jack and Jill:双向宽搜 从(H, h)和(S, s)分别作为搜索的初始节点,同时进行搜索。 如果两个搜索集合有交集,则搜索结束。 程序设计实习2007 * * * 程序设计实习2007 * * * * * 输入数据: 2 3 4 1 5 0 7 6 8 输出结果: ullddrurdllurdruldr 2 3 4 1 5 7 6 8 输入数据代表: 移动序列中 u 表示使空格上移 d 表示使空格下移 r 表示使空格右移 l 表示使空格左移 1 2 3 4 5 6 7 8 输出数据是一个移动序列,使得移动后结果变成 用广搜解决八数码问题(POJ1077) * //八数码问题 ,单向广搜,最简单做法, POJ 891MS HDU TLE #include iostream #include bitset using namespace std; int nGoalStatus; //目标状态 bitset362880 Flags; //节点是否扩展的标记 char szResult[400000]; //结果 char szMoves[400000]; //移动步骤 : u/d/r/l int anFather[400000]; //父节点指针 int MyQueue[400000]; //状态队列,状态总数362880 int nQHead; int nQTail; char sz4Moves[] = udrl;//四种动作 template class T unsigned int GetPermutationNum(T * first, T * permutation,int len) { //permutation编号从0开始算, [first,first+len) 里面放着第0号 permutation,排列的每个元素都不一样 返回排列的编号 unsigned int factorial[21] = { 1,1,2,6,24,120,720,5040,40320,362880,3628800 479001600,1932053504,1278945280, 2004310016,2004189184,4006445056,3396534272,109641728,2192834560 }; bool used[21] = {0}; int perInt[21]; //要转换成 [0,len-1] 的整数的排列 for( int i = 0;i len; ++i ) for( int j = 0; j len; ++j ) { if( * ( permutation + i ) == * (first+j)) { perInt[i] = j; break; } } unsigned int num = 0; for( int i = 0;i len; ++ i ) { unsigned int n = 0; for( int j = 0; j perInt[i]; ++ j) { if(! used[j] ) ++n; } num += n * factorial[len-i-1]; used[perInt[i]] = true; } return num; } template class T void GenPermutationByNum(T * first, T * permutation,int len, unsigned int No) //根据排列编号,生成排列 { //[first,first+len) 里面放着第0号 permutation,,排列的每个元素都不一样 unsigned int factorial[21] = { 1,1,2,6,24,120,720,5040,40320,362880,3628800479001600,1932053504,1278945280,2004310016,2004189184,4006445056,3396534272,109641728,2192834560 }; bool used[21] = {0}; int perInt[21]; //要转换成 [0,len-1] 的整数的排列 for(int i = 0;i len; ++ i ) { unsigned int tmp; int n = 0;int j; for( j = 0; j len; ++j ) { if( !used[j] ) { if( factorial

文档评论(0)

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

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

1亿VIP精品文档

相关文档