cdoj 414 八数码 (双向bfs+康拓展开,A*)
2015-07-05 11:27
381 查看
一道关乎人生完整的问题。
DBFS的优越:避免了结点膨胀太多。
假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的。
分析:起始状态结点数为1,每加深一层,结点数An = An-1*m。假如搜索了i层找到终点,那么经过的结点数是O(i^m),如果从两边同时搜索,结点数是O(i^(m/2))。
极端情况,终点完全封闭。
DBFS的正确姿势:
图片来源:http://www.cppblog.com/Yuan/archive/2011/02/23/140553.aspx
View Code
.bat
DBFS的优越:避免了结点膨胀太多。
假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的。
分析:起始状态结点数为1,每加深一层,结点数An = An-1*m。假如搜索了i层找到终点,那么经过的结点数是O(i^m),如果从两边同时搜索,结点数是O(i^(m/2))。
极端情况,终点完全封闭。
DBFS的正确姿势:
图片来源:http://www.cppblog.com/Yuan/archive/2011/02/23/140553.aspx
#include<bits/stdc++.h> using namespace std; int main() { srand( time( NULL ) ); char s[20] ; char ori[20] = "12345678"; int n = 10; int m = 10; int init = 1; for(int i = 0; i < 50; i++) next_permutation(ori,ori+8); for(int i=0;i<n;i++) { for(int j = 0;j<m;j++){ strcpy(s,ori); s[8] = 'x';s[9] = '\0'; swap(s[8],s[rand()%8]); for(int k = 0;k < 9; k++) printf("%c%c",s[k],k==8?'\n':' '); } next_permutation(ori,ori+8); } }
View Code
.bat
:loop make.exe>data.txt std.exe<data.txt>std.txt my<data.txt>my.txt fc my.txt std.txt if not errorlevel 1 goto loop pause
相关文章推荐
- 【原创】CancellableWait
- 拦截导弹
- Ueditor富文本编辑器
- siem主流厂商
- poj 2251 Dungeon Master
- Django 部署在局域网上
- 【Linux知识】server性能测试--UnixBench
- iOS开发网络篇—NSURLConnection基本使用
- android FragmentActivity+FragmentTabHost+Fragment框架布局
- javascript内存泄露
- javascript实现控制的多级下拉菜单
- gcc 4.7.0 以上版本的gcc可能存在的bug及解决方法
- 关于resetlogs
- Deep Learning for Nature Language Processing --- 第五讲
- font-size的探究
- sublime快捷方式和node.js
- 马拦过河卒(NOIP)
- NSBundle 的常用方法
- <VirtualHost *:80>配置文件
- 范围要找个时间记住