每日总结
迭代加深搜索算法:
定义:枚举或二分试探步数
适用于:求最小步数、最优步数的回溯类问题
法一:for循环从1开始枚举maxstep
bool ok=false;
int maxstep;
void f(int step)
{
if(step>maxstep)
{
if(满足出口)
{
ok=true;
做出相关处理;
}
return;
}
if(!ok)做出每步选择(每步前面都要判断是否ok)
}
答案为maxstep
法二:二分查找
void f(int step)
{
if(满足出口条件)
{
ok=true;
}
else
{
if(!ok)作出回溯处理;
}
}
二分查找过程:
int s=0;e=100;
while(s<=e)
{
maxstep=(s+e)/2;
ok=false;
f(1);
if(ok)
{
s=maxstep+1;
ans=maxstep;
}
else e=maxstep-1;
}
答案为ans