这题是BFS水的
主要是范围
0<=n,k<=100000 但是有可能搜到200000……
半天功夫才A.
program P3278;
const
maxn=200000;
var
n,k,i,j:longint;
q,deep:array[1..maxn] of longint;
b:array[0..maxn] of boolean;
procedure add(x:longint);
begin
if not(b[x]) then
begin
b[x]:=true;
inc(j);
q[j]:=x;
deep[j]:=deep[i]+1;
end;
end;
begin
read(n,k);
i:=1;
j:=1;
fillchar(b,sizeof(b),false);
b[n]:=true;
q[1]:=n;deep[1]:=0;
if n=k then
begin
writeln('0');
halt;
end;
while i<=j do
begin
if (q[i]>0) then add(q[i]-1);
if b[k] then break;
if (q[i]<maxn) then add(q[i]+1);
if b[k] then break;
if (q[i]*2<maxn) then add(q[i]*2);
if b[k] then break;
inc(i);
end;
writeln(deep[j]);
end.
本文探讨了在特定范围内使用BFS(宽度优先搜索)算法解决问题的方法,通过一个具体实例展示了如何实现BFS算法,包括节点状态管理和遍历过程。讨论了在0<=n,k<=100000的范围内可能触及的最大搜索边界,并提供了完整的Pascal语言实现代码。
213

被折叠的 条评论
为什么被折叠?



