亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cword.pas

?? 本光盤是《國際大學生程序設計競賽例題解(一)》的配套光盤
?? PAS
字號:
program CrossWord;
type
  ptr=^node;
  node=record  {字母樹結點}
    n:array['A'..'Z'] of word;  {字母的個數}
    nx:array['A'..'Z'] of ptr;  {下一個字母}
  end;
var
  cw:ptr;  {clown單詞樹}
  m,n,a,c,len,alen:byte; 
  {a:across單詞  c:clown單詞  len:整個矩陣的總格數  alen:across單詞總長度減去已排入矩陣的across單詞總長度}
  aw:array[0..100] of string[20];  {across單詞列表}
  mk:array[1..100] of boolean;  {mk[i]表示第i個across單詞已用}
  w:array[0..100] of byte;  {第i步搜索用第w[i]個across單詞}
  p:array[0..100] of byte;  {第i步搜索的單詞放在p[i]位置}
  b:array[1..100] of char;  {搜索中用到的字符矩陣}

procedure selword(l:byte); forward;

procedure init;  {初始化}
var
  f:text;
  i,j:byte;
  st:string;
  q,q1:ptr;
begin
  fillchar(aw,sizeof(aw),0);
  cw:=nil;
  assign(f,'cword.dat');reset(f);
  readln(f,m,n);len:=m*n;
  readln(f,a,c);alen:=0;
  for i:=1 to a do begin readln(f,aw[i]);inc(alen,length(aw[i])) end;
  for i:=1 to c do  {構造clown單詞樹}
    begin
      readln(f,st);
      q:=nil;q1:=cw;
      for j:=1 to length(st) do
        begin
          if q1=nil then
            begin
              if q1=cw
                then begin new(cw);q1:=cw end
                else begin new(q1);q^.nx[st[j-1]]:=q1 end;
              fillchar(q1^,sizeof(q1^),0);
            end;
          inc(q1^.n[st[j]]);
          q:=q1;q1:=q1^.nx[st[j]];
        end;
    end;
  close(f);
  fillchar(w,sizeof(w),0);
  fillchar(mk,sizeof(mk),0);
  fillchar(b,sizeof(b),0);
  fillchar(p,sizeof(p),0);
  p[0]:=1;
end;

procedure print;  {輸出結果}
var
  i:byte;
  ch:char;
  f:text;
begin
  assign(f,'cword.out');rewrite(f);
  for i:=1 to len do
    begin
      if (i>1) and (i mod n=1) then writeln(f);
      if b[i]=#0 then write(f,'* ') else write(f,b[i],' ');
    end;
  close(f);
end;

function match_prv(l,i:byte):boolean;  {檢查一行前的不可增加clown單詞的合法性}
var
  lal:array['A'..'Z'] of byte;
  c:char;
  j:byte;
  k:integer;
  q:ptr;
begin
  fillchar(lal,sizeof(lal),0);
  for j:=i-n to i-1 do if b[j]<>#0 then inc(lal[b[j]]);
  for j:=i-n to i-1 do if b[j]=#0 then
    begin
      k:=j-n;
      while (k>0) and (b[k]<>#0) do dec(k,n);
      inc(k,n);
      if k<>j then
        begin
          q:=cw;
          while k<j-n do
            begin
              q:=q^.nx[b[k]];
              inc(k,n);
            end;
          if q^.nx[b[k]]<>nil then
            begin
              for c:='A' to 'Z' do
                if q^.n[b[k]]+lal[b[k]]<q^.nx[b[k]]^.n[c] then
                  begin match_prv:=false;exit end;
            end;
        end;
    end;
  match_prv:=true;
end;

procedure put(l,i:byte);  {放入單詞}
var j:byte;
begin
  for j:=i to i+length(aw[w[l]])-1 do b[j]:=aw[w[l],j-i+1];
end;

procedure erase(l,i:byte);  {擦除單詞}
var j:byte;
begin
  for j:=i to i+length(aw[w[l]])-1 do b[j]:=#0;
end;

function match(l,i:byte):boolean;  {檢查合法性}
var
  j:byte;
  k:integer;
  q:ptr;
begin
  if (i mod n<>1) and (i=p[l-1]+length(aw[w[l-1]])) then {不能緊接前一單詞,剛好換行則例外}
    begin match:=false;exit end;
  if (i-1) div n<>(i+length(aw[w[l]])-2) div n then  {across單詞不在同一行}
    begin match:=false;exit end;
  if len-i+1<alen then begin match:=false;exit end;  {剩余格數不夠放剩余單詞}
  if i+length(aw[w[l]])-1>len then begin match:=false;exit end;  {放不下}
  put(l,i);  {放入單詞}
  for j:=i to i+length(aw[w[l]])-1 do
    begin
      k:=j;
      while (k>0) and (b[k]<>#0) do dec(k,n);
      inc(k,n);
      q:=cw;
      while k<j do
        begin
          if q^.nx[b[k]]=nil then
            begin
              erase(l,i);
              match:=false;exit
            end;
          q:=q^.nx[b[k]];
          inc(k,n);
        end;
      if q^.n[b[k]]=0 then
        begin
          erase(l,i);
          match:=false;exit
        end;
    end;
  match:=true;
end;

procedure dec_cw(l,i:byte);  {調整clown單詞樹的單詞數}
var
  j:byte;
  k:integer;
  q:ptr;
begin
  for j:=i to i+length(aw[w[l]])-1 do
    begin
      k:=j;
      while (k>0) and (b[k]<>#0) do dec(k,n);
      inc(k,n);
      q:=cw;
      while k<j do
        begin
          q:=q^.nx[b[k]];
          inc(k,n);
        end;
      dec(q^.n[b[k]]);
    end;
end;

procedure inc_cw(l,i:byte);  {恢復clown單詞樹的單詞數}
var
  j:byte;
  k:integer;
  q:ptr;
begin
  for j:=i to i+length(aw[w[l]])-1 do
    begin
      k:=j;
      while (k>0) and (b[k]<>#0) do dec(k,n);
      inc(k,n);
      q:=cw;
      while k<j do
        begin
          q:=q^.nx[b[k]];
          inc(k,n);
        end;
      inc(q^.n[b[k]]);
    end;
end;

procedure place(l:byte);  {選擇位置}
var i,ma:byte;
begin
  if len>p[l-1]+length(aw[w[l-1]])+n then ma:=len else ma:=p[l-1]+length(aw[w[l-1]])+n;  {計算終止位置}
  for i:=p[l-1]+length(aw[w[l-1]]) to ma do {從上一個單詞的結尾位置開始搜索n個位置}
    begin
      if (i>n+n) and (i mod n=1) and (not match_prv(l,i)) then break; {檢查一行前的不可增長clown單詞的合法性}
      if match(l,i) then  {檢查合法性}
        begin
          p[l]:=i;
          dec_cw(l,i);  {調整clown單詞樹的單詞數}
          dec(alen,length(aw[w[l]]));  {減少未用的across單詞數}
          selword(l+1);  {進入下一步搜索}
          inc(alen,length(aw[w[l]]));  {恢復未用的across單詞數}
          inc_cw(l,i);  {恢復clown單詞樹的單詞數}
          erase(l,i);  {擦除當前across單詞,恢復矩陣}
        end;
    end;
end;

procedure selword(l:byte);  {選擇單詞}
var i:byte;
begin
  if l=a+1 then begin print;halt end  {搜索得到答案,輸出結果}
  else
    for i:=1 to a do if not mk[i] then
      begin
        w[l]:=i;
        mk[i]:=true;
        place(l);  {選擇當前單詞的位置}
        mk[i]:=false;
      end;
end;

begin  {主程序}
  init;  {初始化}
  selword(1);  {開始搜索}
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影院久久精品| 2020国产精品自拍| 国产精品一区久久久久| 日韩精品一区第一页| 国产精品初高中害羞小美女文| 欧美一区二区三区日韩视频| 欧美日韩国产美女| 一本久久综合亚洲鲁鲁五月天 | 色综合久久久久综合99| 91在线免费视频观看| 国产精品一卡二卡| 青椒成人免费视频| 国产自产高清不卡| 精品午夜一区二区三区在线观看| 亚洲午夜精品在线| 日本v片在线高清不卡在线观看| 亚洲精品乱码久久久久久日本蜜臀| 久久久亚洲精华液精华液精华液 | 一区二区成人在线视频| 国产精品国产三级国产a| 国产精品二三区| 18涩涩午夜精品.www| 欧美国产日本视频| 亚洲激情六月丁香| 天天av天天翘天天综合网| 亚洲一区二区三区四区在线 | 一区二区免费视频| 日日摸夜夜添夜夜添亚洲女人| 一区二区在线观看免费视频播放| 亚洲一区二区三区四区不卡| 伊人开心综合网| 亚洲国产精品久久人人爱蜜臀| 亚洲成人av电影在线| 日韩av电影天堂| 美腿丝袜亚洲一区| 91丨porny丨中文| 欧美精品丝袜中出| 欧美日韩三级一区二区| 精品999久久久| 国产欧美精品一区aⅴ影院 | 亚洲视频免费看| 天天做天天摸天天爽国产一区| 黄网站免费久久| 色8久久精品久久久久久蜜| 欧美日韩高清影院| 精品国产电影一区二区| 亚洲乱码国产乱码精品精可以看| 天天做天天摸天天爽国产一区| 蜜乳av一区二区| 99久久精品国产网站| 欧美精选一区二区| 国产精品电影一区二区三区| 蜜臀av在线播放一区二区三区| 国产成人99久久亚洲综合精品| 91性感美女视频| 欧美变态口味重另类| 中文字幕一区二区三区在线不卡 | 色综合视频在线观看| 精品免费一区二区三区| 亚洲激情图片一区| 国产精品综合网| 丰满白嫩尤物一区二区| 欧美三级三级三级爽爽爽| 国产欧美精品区一区二区三区 | 亚洲欧洲99久久| 久久99精品国产.久久久久久 | 国产91精品入口| 欧美男女性生活在线直播观看| 91色婷婷久久久久合中文| 色综合咪咪久久| 国产日韩亚洲欧美综合| 中文字幕佐山爱一区二区免费| 九色综合狠狠综合久久| 欧美日韩中文一区| 亚洲欧美国产三级| 大陆成人av片| 精品美女在线观看| 青娱乐精品视频| 欧美挠脚心视频网站| 亚洲精品视频观看| 99视频超级精品| 精品免费国产二区三区| 免费人成精品欧美精品| 欧美色大人视频| 亚洲一区二区三区自拍| 欧美色视频在线观看| 亚洲老妇xxxxxx| 91网站在线观看视频| 国产女人18水真多18精品一级做| 精品一区二区免费视频| 日韩一区二区三区三四区视频在线观看 | 最好看的中文字幕久久| 精品亚洲国内自在自线福利| 精品成人一区二区三区四区| 男人的天堂亚洲一区| 欧美老肥妇做.爰bbww视频| 亚洲影视在线播放| 欧美剧情片在线观看| 全部av―极品视觉盛宴亚洲| 欧美电影一区二区三区| 日韩黄色一级片| 日韩三级在线观看| 国产综合色精品一区二区三区| 亚洲精品一线二线三线无人区| 精品亚洲成a人在线观看| 欧洲一区二区三区在线| 午夜视频在线观看一区二区| 51精品久久久久久久蜜臀| 一区二区欧美精品| 91精品国产丝袜白色高跟鞋| 免费成人美女在线观看| 精品日韩欧美在线| 成人免费电影视频| 亚洲天堂a在线| 91高清视频在线| 国产一区二三区| 日韩和欧美的一区| 久久色在线观看| 99久久99久久精品国产片果冻| 一区二区在线免费| 亚洲精品一区二区三区蜜桃下载 | 国产在线播放一区三区四| 中文字幕高清一区| 欧美午夜精品免费| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品久久人人做人人爱| 欧美午夜理伦三级在线观看| 久久精品国产精品亚洲综合| 国产欧美日韩另类一区| 欧美调教femdomvk| 国产盗摄精品一区二区三区在线| 亚洲欧美日韩在线播放| 日韩三级电影网址| 91久久国产最好的精华液| 国产在线一区二区综合免费视频| 亚洲日本青草视频在线怡红院 | 中文字幕欧美三区| 欧美美女黄视频| 99riav久久精品riav| 国产福利一区二区三区视频在线 | 精品乱码亚洲一区二区不卡| 色猫猫国产区一区二在线视频| 婷婷丁香激情综合| 亚洲激情在线激情| 久久精品亚洲精品国产欧美kt∨| 欧美色偷偷大香| 亚洲国产va精品久久久不卡综合| 久久婷婷成人综合色| 在线观看亚洲专区| 成人一区二区三区在线观看| 理论片日本一区| 日韩不卡一区二区三区| 成人免费小视频| 国产精品天美传媒| 欧美变态tickle挠乳网站| 欧美日韩一区二区在线观看| 国产成人在线观看| 日本成人在线一区| 亚洲成人午夜影院| 日韩欧美123| 欧美一级高清大全免费观看| 欧美亚日韩国产aⅴ精品中极品| 99久久综合狠狠综合久久| 国产一区 二区| 精久久久久久久久久久| 国产白丝网站精品污在线入口| 激情丁香综合五月| 日本午夜一本久久久综合| 亚洲无线码一区二区三区| 亚洲精品成人悠悠色影视| 久久综合狠狠综合久久综合88 | 不卡一区二区在线| 国产999精品久久久久久| 色系网站成人免费| 在线观看日韩精品| 欧美久久久影院| 欧美一区二区精品在线| 日韩小视频在线观看专区| 日韩精品专区在线影院重磅| 久久综合久久鬼色| 亚洲国产精华液网站w| 国产精品毛片大码女人| 中文字幕亚洲成人| 婷婷综合久久一区二区三区| 中文字幕欧美激情一区| 久久久精品免费观看| 《视频一区视频二区| 亚洲国产精品人人做人人爽| 毛片一区二区三区| 国产成人在线免费| 欧美老女人第四色| 91麻豆精品国产91久久久 | 精品国产一区二区亚洲人成毛片 | 裸体在线国模精品偷拍| 成人自拍视频在线观看| 色偷偷成人一区二区三区91| 精品乱人伦一区二区三区| 国产精品视频观看| 日韩综合小视频| 国内精品视频一区二区三区八戒|