问题标题: 接龙游戏(1400)

0
0

0
已采纳
李宗霖
李宗霖
中级守护
中级守护
不知道对不对,但应该差不了多少!
void dfs(int pos,int len){
    int flag=0;     
    for(int i=0;i<vec[pos].size();i++){
        if(v[vec[pos][i]]<2){
            v[vec[pos][i]]++;
            flag=1;
            dfs(vec[pos][i],len+s[vec[pos][i]].size()-length[pos][vec[pos][i]]);
            v[vec[pos][i]]--;
        }
    }
    if(flag==0){
        ans=max(ans,len);
        return ;
    }
}
0
0
0
陆麟瑞
陆麟瑞
资深天翼
资深天翼
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;
我要回答