ببینید درخت جستجو تقریباً یه چیزه مجازیه!
یعنی شما واقعاً یه درخت نمی سازید
بلکه با فراخوانی های بازگشتی برنامه شما حالت یک درخت می گیره. مثلاً شما یه تابع به اسم Solve می نویسی که ورودیش یه حالته.
سپس توی مثلاً bfs دوباره اون رو روی همسایه های اجرا می کنی که در نتیجه یه درخت حالت به وجود می آد:
شبه کد:
کد:
SolveBFS(State current)
{
State[] hamsaye = Succ(current);
for(int i=0;i<hamsaye.length;i++)
{
if( Goal(hamsaye[i]) )
return current;
}
for(int i=0;i<hamsaye.length;i++)
{
SolveBFS( Hamsaye[i] );
}
}
یا مثلاً DFS:
کد:
SolveDFS(State current)
{
if( Goal(current) )
return current;
State[] hamsaye = Succ(current);
for(int i=0;i<hamsaye.length;i++)
{
SolveDFS( Hamsaye[i] );
}
}
یا مثلاً A*:
کد:
SolveAStar(State current, int path)
{
if( Goal(current) )
return current;
State[] hamsaye = Succ(current);
Fringe.Add(hamsaye);
maxH = Fringe.MaxHeuristic();
SolveAStar(MaxHeuristic, path+1);
}
می بینید که ساختمان داده درخت نداریم ولی فراخوانی بازگشتی توابع به صورت درخت است.