搜索我不想说太多,就以一个特别简单的题目为例吧:
例题:一矩形阵列有数字0--9组成,数字1--9代表细胞,细胞定义是沿细胞数字上下左右如果还是细胞数字则为同一细 胞,求给定矩形阵列的细胞个数。
如:4 10
0234500067
1034560500
2045600671
0000000089
对于 2345 这一块细胞来讲,深搜和宽搜顺序是截然不同的,将10个数字编号为:1 2 3 4
345 5 6 7
456 8 9 10
(已上下左右原则)
深搜顺序:1-->2-->5-->8-->9-->10-->7-->4-->3-->6
宽搜顺序:1-->2-->(5,3) 5-->(8,6) 3-->(4) 8-->(9) 6-->(7) 4 9-->(10) (1-->2-->5-->3-->8-->6-->4-->9-->7-->10)
程序略
由此,给出深搜框架:
procedure search(k:integer, {参数表} );
begin
if 到目的地 then 输出解
else
for i:=1 to 算符种数 do
if 满足条件 then
begin
保存结果
search(k+1, {参数表} );
恢复到保存结果之前的状态 //有参数表时不需要
end;
end;
宽搜框架:
procedure bfs
初始化,初始状态存入队列;
队列首指针head:=0; 尾指针 tail:=0;
while head<tail do
begin
指针head后移一位,指向待扩展结点;
for i:=1 to max do
begin
if 扩展出的新节点是目标结点 then 输出并退出;
if 扩展出的新节点符合条件且不与之前的重复 then begin inc(tail);将新结点保存到队列尾部;
end;
end;