您的位置:首页 > 其它

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

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: