vijos p1311(单词接龙)

恩.......

DFS深度搜索+递归,主要是判断的问题(弄了比较久....),把每一次的字母数记录下来,找最大值;

代码如下.....感觉还是不错的......

program p1311;
var
        s:array[1..21] of string;
        b:array[1..21] of longint;
        i,j,k,z,y,l,n,m,max:longint;
        ch,ch2:char;
procedure haha(a:string;data:longint);
var
        i,j,k,l,m,c,data2:longint;
        s2:string;
function pan(x,y:string):longint;
var
        i,j,k,l,lx,ly:longint;
begin
        lx:=length(x); ly:=length(y);
        if(pos(copy(x,1,lx-ly),y)<>0)then pan:=0
        else
        begin
                if lx>ly then l:=ly else l:=lx;
                i:=0;
                repeat
                        inc(i)
                until (copy(x,lx-i+1,i)=copy(y,1,i))or(i>=l);
                if copy(x,lx-i+1,i)=copy(y,1,i)then pan:=i else pan:=0;
        end;
end;
{........................................................}
begin
      if data>max then max:=data;
      for i:=1 to n do
        if (pan(a,s[i])<>0)and(b[i]<2) then
                                        begin
                                                c:=pan(a,s[i]);
                                                data2:=data+length(s[i])-c;
                                                l:=length(a);
                                                s2:=copy(a,1,l-c)+s[i];
                                                inc(b[i]);
                                                haha(s2,data2);
                                                dec(b[i]);
                                        end;








end;
{========================================================}
begin
        readln(n);
        for i:=1 to n do
        readln(s[i]);
        read(ch);
        z:=0;y:=1;
        for i:=1 to n do
                        begin
                 if s[i][1]=ch then begin inc(b[i]);haha(s[i],length(s[i]));dec(b[i]);end;
                     end;
        write(max);
end.                                  
posted @ 2012-10-05 15:52  改名字干什么  阅读(203)  评论(0编辑  收藏  举报