问题标题: 酷町堂:1400接龙游戏 怎么做?

0
0

0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

裸的dfs

function pd(s1,s2:string):longint;//两个字符串连接的长度计算
var
max,i:longint;
s:string;
begin
    max:=10000000;
    for i:=1 to length(s1) do
    begin
        s:=copy(s1,i,length(s1)-i+1);
        if(pos(s,s2)=1)and(length(s)<max) then max:=length(s);
    end;
    if(max=10000000) then exit(-1);
    exit(length(s2)-max);
end;
procedure search(t,sum:longint;ss,s1:string);//搜索回溯核心代码
var
i:longint;
begin
    if(sum>ans) then ans:=sum;
    for i:=1 to n do
    if(b[i]<2)and(pos(s[i],s1)=0)and(pd(s1,s[i])<>-1)or(t=1)and(s[i][1]=ss[1]) then
    begin
        inc(b[i]);
        if(t<>1) then search(t+1,sum+pd(s1,s[i]),ss+s[i],s[i])
        else search(t+1,length(s[i]),ss+s[i],s[i]);
        dec(b[i]);
    end;
end;

0
我要回答