9.鏍戠殑閬嶅巻欏哄簭杞崲聽聽
A. 宸茬煡鍓嶅簭涓簭姹傚悗搴徛犅?
procedure Solve(pre,mid:string);聽聽
var i:integer;聽聽
begin聽聽
聽聽聽聽if (pre='') or (mid='') then exit;聽聽
聽聽聽聽i:=pos(pre[1],mid);聽聽
聽聽聽聽solve(copy(pre,2,i),copy(mid,1,i-1));聽聽
聽聽聽聽solve(copy(pre,i+1,length(pre)-i),copy(mid,i+1,length(mid)-i));聽聽
聽聽聽聽post:=post+pre[1]; {鍔犱笂鏍癸紝閫掑綊緇撴潫鍚巔ost鍗充負鍚庡簭閬嶅巻}聽聽
end;聽聽聽聽
B.宸茬煡涓簭鍚庡簭姹傚墠搴徛犅?
procedure Solve(mid,post:string);聽聽
var i:integer;聽聽
begin聽聽
聽聽聽聽if (mid='') or (post='') then exit;聽聽
聽聽聽聽i:=pos(post[length(post)],mid);聽聽
聽聽聽聽pre:=pre+post[length(post)]; {鍔犱笂鏍癸紝閫掑綊緇撴潫鍚巔re鍗充負鍓嶅簭閬嶅巻}聽聽
聽聽聽聽solve(copy(mid,1,I-1),copy(post,1,I-1));聽聽
聽聽聽聽solve(copy(mid,I+1,length(mid)-I),copy(post,I,length(post)-i));聽聽
end;聽聽聽聽
C.宸茬煡鍓嶅簭鍚庡簭姹備腑搴徛犅犅犅?
function ok(s1,s2:string):boolean;聽聽
var i,l:integer;
聽聽聽聽p:boolean;聽聽
begin聽聽
聽聽聽聽ok:=true;聽聽
聽聽聽聽l:=length(s1);聽聽
聽聽聽聽for i:=1 to l do聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽p:=false;聽聽
聽聽聽聽聽聽聽聽for j:=1 to l do聽聽
聽聽聽聽聽聽聽聽if s1[i]=s2[j] then p:=true;聽聽
聽聽聽聽聽聽聽聽聽聽if not p then聽聽
聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽 ok:=false;exit;聽聽
聽聽聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽end;聽聽聽聽
procedure solve(pre,post:string);聽聽
var i:integer;聽聽
begin聽聽
聽聽聽聽if (pre='') or (post='') then exit;聽聽
聽聽聽聽i:=0;聽聽
聽聽聽聽repeat聽聽
聽聽聽聽聽聽 inc(i);聽聽
聽聽聽聽until ok(copy(pre,2,i),copy(post,1,i));聽聽
聽聽聽聽solve(copy(pre,2,i),copy(post,1,i));聽聽
聽聽聽聽midstr:=midstr+pre[1];聽聽
聽聽聽聽solve(copy(pre,i+2,length(pre)-i-1),copy(post,i+1,length(post)-i-1));聽聽
end;聽聽聽聽
10.姹傚浘鐨勫急榪為氬瓙鍥?DFS)聽聽
procedure dfs ( now,color: integer);聽聽
begin聽聽
聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽if a[now,i] and c[i]=0 then聽聽
聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽 c[i]:=color;聽聽
聽聽聽聽聽聽聽聽聽聽 dfs(I,color);聽聽
聽聽聽聽聽聽聽聽end;聽聽
end;聽聽聽聽
12.榪涘埗杞崲聽聽
A.鏁存暟浠繪剰姝f暣鏁拌繘鍒墮棿鐨勪簰鍖柭犅犅犅?
NOIP1996鏁板埗杞崲聽聽
璁懼瓧絎︿覆A$鐨勭粨鏋勪負: A$='mp'聽聽
鍏朵腑m涓烘暟瀛椾覆(闀垮害< =20),鑰宯,p鍧囦負1鎴?浣嶇殑鏁板瓧涓?鍏朵腑鎵琛ㄨ揪鐨勫唴瀹瑰湪2-10涔嬮棿)
紼嬪簭瑕佹眰:浠庨敭鐩樹笂璇誨叆A$鍚?涓嶇敤姝g‘鎬ф鏌?,灝咥$涓殑鏁板瓧涓瞞(n榪涘埗)浠榪涘埗鐨勫艦寮忚緭鍑?
渚嬪:A$='48< 10 >8'聽聽 鍏舵剰涔変負:灝?0榪涘埗鏁?8,杞崲涓?榪涘埗鏁拌緭鍑?聽聽
杈撳嚭緇撴灉:48< 10 >=60< 8 >聽聽聽聽
B.瀹炴暟浠繪剰姝f暣鏁拌繘鍒墮棿鐨勪簰鍖柭犅?
C.璐熸暟榪涘埗錛毬犅?NOIP2000聽聽 璁捐涓涓▼搴忥紝璇誨叆涓涓崄榪涘埗鏁扮殑鍩烘暟鍜屼竴涓礋榪涘埗鏁扮殑鍩烘暟錛?br />騫跺皢姝ゅ崄榪涘埗鏁拌漿鎹負姝よ礋 榪涘埗涓嬬殑鏁幫細-R鈭坽-2錛?3錛?4,....-20}聽聽聽聽聽聽聽聽聽聽聽聽
13.鍏ㄦ帓鍒椾笌緇勫悎鐨勭敓鎴惵犅?鎺掑垪鐨勭敓鎴愶細錛?..n錛壜犅?
procedure solve(dep:integer);聽聽
var聽聽 i:integer;聽聽
begin聽聽
聽聽聽聽聽聽if dep=n+1 then
聽聽聽聽聽聽begin
聽聽聽聽聽聽聽聽 writeln(s);
聽聽聽聽聽聽聽聽 exit;
聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽 if not used[i] then聽聽
聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽s:=s+chr(i+ord('0'));
聽聽聽聽聽聽聽聽聽聽聽聽used[i]:=true;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽solve(dep+1);聽聽
聽聽聽聽聽聽聽聽聽聽聽聽s:=copy(s,1,length(s)-1);
聽聽聽聽聽聽聽聽聽聽聽聽used[i]:=false;聽聽
聽聽聽聽聽聽聽聽 end;聽聽
end;聽聽
緇勫悎鐨勭敓鎴?1..n涓夊彇k涓暟鐨勬墍鏈夋柟妗?聽聽
procedure solve(dep,pre:integer);聽聽
var聽聽 i:integer;聽聽
begin聽聽
聽聽聽聽聽聽if dep=k+1 then
聽聽聽聽聽聽begin
聽聽聽聽聽聽聽聽 writeln(s);
聽聽聽聽聽聽聽聽 exit;
聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽 if (not used[i]) and (i >pre) then聽聽
聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽 s:=s+chr(i+ord('0'));
聽聽聽聽聽聽聽聽聽聽聽聽 used[i]:=true;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽 solve(dep+1,i);聽聽
聽聽聽聽聽聽聽聽聽聽聽聽 s:=copy(s,1,length(s)-1);
聽聽聽聽聽聽聽聽聽聽聽聽 used[i]:=false;聽聽
聽聽聽聽聽聽聽聽 end;聽聽
end;聽聽聽聽聽聽聽聽
14 閫掓帹鍏崇郴聽聽 璁$畻瀛椾覆搴忓彿妯″瀷聽聽 USACO1.2.5 StringSobits聽聽
闀垮害涓篘 (N< =31)鐨?1涓蹭腑1鐨勪釜鏁板皬浜庣瓑浜嶭鐨勪覆緇勬垚鐨勯泦鍚堜腑鎵懼嚭鎸夊ぇ灝忔帓搴忓悗鐨勭I涓?1涓層?br />鏁板瓧鍒掑垎妯″瀷
*NOIP2001鏁扮殑鍒掑垎
灝嗘暣鏁皀鍒嗘垚k浠斤紝涓旀瘡浠戒笉鑳戒負絀猴紝
浠繪剰涓ょ鍒嗘硶涓嶈兘鐩稿悓(涓嶈冭檻欏哄簭)銆?
d[0,0]:=1;
for p:=1 to n do
聽聽聽聽for i:=p to n do
聽聽聽聽聽聽 for j:=k downto 1 do inc(d[i,j],d[i-p,j-1]);
聽聽聽聽聽聽聽聽聽聽 writeln(d[n,k]);
*鍙樺艦1錛氳冭檻欏哄簭
d[ i, j] : = d [ i-k, j-1] (k=1..i)
*鍙樺艦2錛氳嫢鍒嗚В鍑烘潵鐨勬瘡涓暟鍧囨湁涓涓笂闄恗
d[ i, j] : = d [ i-k, j-1] (k=1..m)
15.綆楃浼樺厛娉曟眰瑙h〃杈懼紡姹傚奸棶棰?
const maxn=50;
var s1:array[1..maxn] of integer; {s1涓烘暟瀛楁爤}
聽聽聽聽s2:array[1..maxn] of char; {s2涓虹畻絎︽爤}
聽聽聽聽t1,t2:integer; {鏍堥《鎸囬拡}
procedure calcu;
var x1,x2,x:integer;
聽聽聽聽p:char;
begin聽聽
聽聽聽聽p:=s2[t2];
聽聽聽聽dec(t2);聽聽
聽聽聽聽x2:=s1[t1];
聽聽聽聽dec(t1);聽聽
聽聽聽聽x1:=s1[t1];
聽聽聽聽dec(t1);聽聽
聽聽聽聽case p of聽聽
聽聽聽聽聽聽'+':x:=x1+x2;聽聽
聽聽聽聽聽聽'-':x:=x1-x2;聽聽
聽聽聽聽聽聽'*':x:=x1*x2;聽聽
聽聽聽聽聽聽'/':x:=x1 div 2;聽聽
聽聽聽聽end;聽聽
聽聽聽聽inc(t1);
聽聽聽聽s1[t1]:=x;
end;
procedure work;
var c:char;
聽聽聽聽v:integer;
begin聽聽
聽聽聽聽t1:=0;
聽聽聽聽t2:=0;聽聽
聽聽聽聽read(c);聽聽
聽聽聽聽while c< >';' do聽聽
聽聽聽聽聽聽 case c of聽聽
聽聽聽聽聽聽 '+','-':聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽 while (t2 >0) and (s2[t2]< >'(') do calcu;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 inc(t2);s2[t2]:=c;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 read(c);聽聽
聽聽聽聽聽聽 end ;聽聽
聽聽聽聽聽聽 '*','/':聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽 if (t2 >0) and ((s2[t2]='*') or (s2[t2]='/')) then calcu;聽聽
聽聽聽聽聽聽聽聽聽聽 inc(t2);s2[t2]:=c;聽聽
聽聽聽聽聽聽聽聽聽聽 read(c);聽聽
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽 '(':
聽聽聽聽聽聽 begin
聽聽聽聽聽聽聽聽聽聽 inc(t2);
聽聽聽聽聽聽聽聽聽聽 s2[t2]:=c;
聽聽聽聽聽聽聽聽聽聽 read(c);
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽 ')':聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽 while s2[t2]< >
聽聽聽聽聽聽 '(' do calcu;聽聽
聽聽聽聽聽聽聽聽聽聽 dec(t2);
聽聽聽聽聽聽聽聽聽聽 read(c);聽聽
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽 '0'..'9':聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽 v:=0;聽聽
聽聽聽聽聽聽聽聽聽聽 repeat聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽v:=10*v+ord(c)-ord('0');聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽read(c);聽聽
聽聽聽聽聽聽聽聽聽聽 until (c< '0') or (c >'9');聽聽
聽聽聽聽聽聽聽聽聽聽 inc(t1);
聽聽聽聽聽聽聽聽聽聽 s1[t1]:=v;聽聽
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽while t2 >0 do calcu;聽聽
聽聽聽聽聽聽聽聽聽聽 writeln(s1[t1]);
end;
16.鏌ユ壘綆楁硶聽聽
鎶樺崐鏌ユ壘聽聽
function binsearch(k:keytype):integer;聽聽
var low,hig,mid:integer;聽聽
begin聽聽
聽聽聽聽low:=1;
聽聽聽聽hig:=n;聽聽
聽聽聽聽mid:=(low+hig) div 2;聽聽
聽聽聽聽while (a[mid].key< >k) and (low< =hig) do聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽 if a[mid].key >k then hig:=mid-1聽聽
聽聽聽聽聽聽聽聽 else low:=mid+1;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽mid:=(low+hig) div 2;聽聽
聽聽聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽聽聽 if low >hig then mid:=0;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽binsearch:=mid;聽聽
end;聽聽聽聽
鏍戝艦鏌ユ壘聽聽
浜?鎺掑簭鏍戯細姣忎釜緇撶偣鐨勫奸兘澶т簬鍏跺乏瀛愭爲浠諱竴緇撶偣鐨勫艱屽皬浜庡叾鍙沖瓙鏍戜換涓緇撶偣鐨勫箋偮犅?
鏌ユ壘聽聽
function treesrh(k:keytype):pointer;聽聽
var q:pointer;聽聽
begin聽聽
聽聽聽聽q:=root;聽聽
聽聽聽聽while (q< >nil) and (q^.key< >k) do聽聽 if k<
聽聽聽聽聽聽 q^.key then q:=q^.left聽聽 else q:=q^.right;聽聽
聽聽聽聽treesrh:=q;聽聽
end;
B.Kruskal綆楁硶錛?璐績)
聽聽聽聽鎸夋潈鍊奸掑欏哄簭鍒犲幓鍥句腑鐨勮竟錛岃嫢涓嶅艦鎴愬洖璺垯灝嗘杈瑰姞鍏ユ渶灝忕敓鎴愭爲銆?
function find(v:integer):integer; {榪斿洖欏剁偣v鎵鍦ㄧ殑闆嗗悎}
var i:integer;
begin聽聽
聽聽聽聽i:=1;聽聽
聽聽聽聽while (i< =n) and (not v in vset[i]) do inc(i);聽聽
聽聽聽聽聽聽聽聽 if i< =n then find:=i聽聽 else find:=0;
end;
procedure kruskal;
var tot,i,j:integer;
begin聽聽
聽聽 for i:=1 to n do vset[i]:=[i];{鍒濆鍖栧畾涔塶涓泦鍚堬紝絎琁涓泦鍚堝寘鍚竴涓厓绱營}聽聽
聽聽聽聽聽聽 p:=n-1; q:=1; tot:=0; {p涓哄皻寰呭姞鍏ョ殑杈規暟錛宷涓鴻竟闆嗘寚閽坿聽聽
聽聽聽聽聽聽 sort;聽聽
聽聽 {瀵規墍鏈夎竟鎸夋潈鍊奸掑鎺掑簭錛屽瓨浜巈[i]涓紝e[i].v1涓巈[i].v2涓鴻竟I鎵榪炴帴鐨勪袱涓《鐐圭殑搴忓彿錛宔[i].len涓虹I鏉¤竟鐨勯暱搴聽聽
聽聽 while p >0 do聽聽
聽聽 begin聽聽
聽聽聽聽聽聽 i:=find(e[q].v1);
聽聽聽聽聽聽 j:=find(e[q].v2);聽聽
聽聽聽聽聽聽 if i< >j then聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽inc(tot,e[q].len);聽聽
聽聽聽聽聽聽聽聽聽聽vset[i]:=vset[i]+vset[j];
聽聽聽聽聽聽聽聽聽聽vset[j]:=[];聽聽
聽聽聽聽聽聽聽聽聽聽dec(p);聽聽
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽 inc(q);聽聽
聽聽 end;聽聽
5.鏈鐭礬寰劼犅?
A.鏍囧彿娉曟眰瑙e崟婧愮偣鏈鐭礬寰勶細聽聽
var聽聽 a:array[1..maxn,1..maxn] of integer;聽聽
聽聽聽聽聽聽b:array[1..maxn] of integer; {b[i]鎸囬《鐐筰鍒版簮鐐圭殑鏈鐭礬寰剗聽聽
聽聽聽聽聽聽mark:array[1..maxn] of boolean;聽聽聽聽
procedure bhf;聽聽
var聽聽 best,best_j:integer;聽聽
begin聽聽
聽聽聽聽聽聽fillchar(mark,sizeof(mark),false);聽聽
聽聽聽聽聽聽mark[1]:=true;
聽聽聽聽聽聽b[1]:=0;{1涓烘簮鐐箎聽聽
聽聽聽聽聽聽repeat聽聽 best:=0;聽聽
聽聽聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽If mark[i] then {瀵規瘡涓涓凡璁$畻鍑烘渶鐭礬寰勭殑鐐箎聽聽
聽聽聽聽聽聽聽聽聽聽for j:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (not mark[j]) and (a[i,j] >0) then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (best=0) or (b[i]+a[i,j]< best) then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽best:=b[i]+a[i,j]; best_j:=j;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if best >0 then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽b[best_j]:=best;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽mark[best_j]:=true;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽 until best=0;聽聽
end;{bhf}聽聽聽聽
B.Floyed綆楁硶姹傝В鎵鏈夐《鐐瑰涔嬮棿鐨勬渶鐭礬寰勶細聽聽
procedure floyed;聽聽
begin聽聽
聽聽 for I:=1 to n do聽聽
聽聽聽聽聽聽 for j:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽 if a[I,j] >0 then
聽聽聽聽聽聽聽聽聽聽聽聽聽聽p[I,j]:=I else p[I,j]:=0;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽{p[I,j]琛ㄧずI鍒癹鐨勬渶鐭礬寰勪笂j鐨勫墠椹辯粨鐐箎聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽for k:=1 to n do {鏋氫婦涓棿緇撶偣}聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽for i:=1 to n do聽聽 for j:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if a[i,k]+a[j,k]< a[i,j] then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 a[i,j]:=a[i,k]+a[k,j];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 p[I,j]:=p[k,j];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end;聽聽
end;
C. Dijkstra 綆楁硶錛?
綾諱技鏍囧彿娉曪紝鏈川涓鴻椽蹇冪畻娉曘?
var a:array[1..maxn,1..maxn] of integer;
聽聽聽聽b,pre:array[1..maxn] of integer; {pre[i]鎸囨渶鐭礬寰勪笂I鐨勫墠椹辯粨鐐箎
聽聽聽聽mark:array[1..maxn] of boolean;
procedure dijkstra(v0:integer);
begin聽聽
聽聽聽聽fillchar(mark,sizeof(mark),false);聽聽
聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽d[i]:=a[v0,i];聽聽
聽聽聽聽聽聽聽聽if d[i]< >0 then
聽聽聽聽聽聽聽聽聽聽 pre[i]:=v0
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽 pre[i]:=0;聽聽
聽聽聽聽end;聽聽
聽聽聽聽mark[v0]:=true;聽聽
聽聽聽聽repeat {姣忓驚鐜竴嬈″姞鍏ヤ竴涓1闆嗗悎鏈榪戠殑緇撶偣騫惰皟鏁村叾浠栫粨鐐圭殑鍙傛暟}聽聽
聽聽聽聽聽聽聽聽min:=maxint;
聽聽聽聽聽聽聽聽u:=0; {u璁板綍紱?闆嗗悎鏈榪戠殑緇撶偣}聽聽
聽聽聽聽聽聽聽聽for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if (not mark[i]) and (d[i]< min) then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 u:=i; min:=d[i];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if u< >0 then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 mark[u]:=true;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 for i:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (not mark[i]) and (a[u,i]+d[u]< d[i]) then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽d[i]:=a[u,i]+d[u];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽pre[i]:=u;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 end;聽聽
聽聽聽聽 until u=0;
end;
D.璁$畻鍥劇殑浼犻掗棴鍖?
Procedure Longlink;
Var T:array[1..maxn,1..maxn] of boolean;
Begin聽聽
聽聽聽聽Fillchar(t,sizeof(t),false);聽聽
聽聽聽聽For k:=1 to n do聽聽
聽聽聽聽聽聽聽聽For I:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽For j:=1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽T[I,j]:=t[I,j] or (t[I,k] and t[k,j]);
End;聽聽
7.鎺掑簭綆楁硶聽聽
A.蹇熸帓搴忥細聽聽
procedure sort(l,r:integer);聽聽
var i,j,mid:integer;聽聽
begin聽聽
聽聽聽聽i:=l;j:=r;
聽聽聽聽mid:=a[(l+r) div 2];聽聽
聽聽聽聽{灝嗗綋鍓嶅簭鍒楀湪涓棿浣嶇疆鐨勬暟瀹氫箟涓轟腑闂存暟}聽聽
聽聽聽聽repeat聽聽
聽聽聽聽while a[i]< mid do inc(i); {鍦ㄥ乏鍗婇儴鍒嗗鎵炬瘮涓棿鏁板ぇ鐨勬暟}聽聽
聽聽聽聽while mid< a[j] do dec(j);{鍦ㄥ彸鍗婇儴鍒嗗鎵炬瘮涓棿鏁板皬鐨勬暟}聽聽
聽聽聽聽if i< =j then聽聽
聽聽聽聽begin {鑻ユ壘鍒頒竴緇勪笌鎺掑簭鐩爣涓嶄竴鑷寸殑鏁板鍒欎氦鎹㈠畠浠瑌聽聽
聽聽聽聽聽聽 swap(a[i],a[j]);聽聽
聽聽聽聽聽聽 inc(i);
聽聽聽聽聽聽 dec(j); {緇х畫鎵緘聽聽
聽聽聽聽end;聽聽
聽聽聽聽until i >j;聽聽
聽聽聽聽if l< j then
聽聽聽聽聽聽 sort(l,j); {鑻ユ湭鍒頒袱涓暟鐨勮竟鐣岋紝鍒欓掑綊鎼滅儲宸﹀彸鍖洪棿}聽聽
聽聽聽聽if i< r then sort(i,r);聽聽
end;{sort}
B.鎻掑叆鎺掑簭錛?
procedure insert_sort(k,m:word); {k涓哄綋鍓嶈鎻掑叆鐨勬暟錛宮涓烘彃鍏ヤ綅緗殑鎸囬拡}
var i:word; p:0..1;
begin聽聽
聽聽聽聽p:=0;聽聽
聽聽聽聽for i:=m downto 1 do聽聽
聽聽聽聽聽聽聽聽if k=a[i] then exit;聽聽
聽聽聽聽聽聽聽聽repeat聽聽 If k >a[m] then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽a[m+1]:=k; p:=1;聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 end聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 else聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽a[m+1]:=a[m];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽dec(m);聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽聽聽until p=1;
end;{insert_sort}聽聽
l 涓葷▼搴忎腑涓猴細聽聽
聽聽 a[0]:=0;聽聽
聽聽 for I:=1 to n do insert_sort(b[i],I-1);聽聽聽聽
C.閫夋嫨鎺掑簭錛毬犅?
procedure sort;聽聽
var i,j,k:integer;聽聽
begin聽聽
聽聽聽聽 for i:=1 to n-1 do聽聽
聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽 k:=i;聽聽
聽聽聽聽聽聽聽聽 for j:=i+1 to n do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if a[j]< a[k] then
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 k:=j; {鎵懼嚭a[i]..a[n]涓渶灝忕殑鏁頒笌a[i]浣滀氦鎹聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if k< >i then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽a[0]:=a[k];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽a[k]:=a[i];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽a[i]:=a[0];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 end;聽聽
聽聽聽聽 end;聽聽
end;聽聽聽聽
D. 鍐掓場鎺掑簭聽聽
procedure sort;聽聽
var i,j,k:integer;聽聽
begin聽聽
聽聽聽聽for i:=n downto 1 do聽聽
聽聽聽聽聽聽聽聽for j:=1 to i-1 do聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if a[j] >a[i] then聽聽
聽聽聽聽聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 a[0]:=a[i];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 a[i]:=a[j];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 a[j]:=a[0];聽聽
聽聽聽聽聽聽聽聽聽聽聽聽end;聽聽
end;聽聽聽聽
E.鍫嗘帓搴忥細聽聽
procedure sift(i,m:integer);{璋冩暣浠涓烘牴鐨勫瓙鏍戞垚涓哄爢,m涓虹粨鐐規繪暟}聽聽
var k:integer;聽聽
begin聽聽
聽聽聽聽a[0]:=a[i];
聽聽聽聽k:=2*i;{鍦ㄥ畬鍏ㄤ簩*鏍戜腑緇撶偣i鐨勫乏瀛╁瓙涓?*i,鍙沖瀛愪負2*i+1}聽聽
聽聽聽聽while k< =m do聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽if (k< m) and (a[k]< a[k+1]) then inc(k);{鎵懼嚭a[k]涓巃[k+1]涓緝澶у紏聽聽
聽聽聽聽聽聽聽聽if a[0]< a[k] then聽聽
聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽 a[i]:=a[k];
聽聽聽聽聽聽聽聽聽聽 i:=k;
聽聽聽聽聽聽聽聽聽聽 k:=2*i;聽聽
聽聽聽聽聽聽聽聽end聽聽
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽 k:=m+1;聽聽
聽聽聽聽聽聽聽聽end;聽聽
聽聽聽聽聽聽聽聽a[i]:=a[0]; {灝嗘牴鏀懼湪鍚堥傜殑浣嶇疆}聽聽
end;
procedure heapsort;
var j:integer;
begin聽聽
聽聽聽聽for j:=n div 2 downto 1 do sift(j,n);聽聽
聽聽聽聽聽聽聽聽for j:=n downto 2 do聽聽
聽聽聽聽聽聽聽聽begin聽聽
聽聽聽聽聽聽聽聽聽聽聽聽swap(a[1],a[j]);聽聽
聽聽聽聽聽聽聽聽聽聽聽聽sift(1,j-1);聽聽
聽聽聽聽聽聽聽聽end;
end;
F. 褰掑茍鎺掑簭
{a涓哄簭鍒楄〃錛宼mp涓鴻緟鍔╂暟緇剗
procedure merge(var a:listtype; p,q,r:integer);
{灝嗗凡鎺掑簭濂界殑瀛愬簭鍒梐[p..q]涓巃[q+1..r]鍚堝茍涓烘湁搴忕殑tmp[p..r]}
var I,j,t:integer;
聽聽聽聽tmp:listtype;
begin聽聽
聽聽聽聽t:=p;
聽聽聽聽i:=p;
聽聽聽聽j:=q+1;{t涓簍mp鎸囬拡錛孖,j鍒嗗埆涓哄乏鍙沖瓙搴忓垪鐨勬寚閽坿聽聽
聽聽聽聽while (t< =r) do聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽 if (i< =q){宸﹀簭鍒楁湁鍓╀綑} and ((j >r) or (a[i]< =a[j])) then聽聽{婊¤凍鍙栧乏杈瑰簭鍒楀綋鍓嶅厓绱犵殑瑕佹眰}聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽tmp[t]:=a[i]; inc(i);聽聽
聽聽聽聽聽聽 end聽聽
聽聽聽聽聽聽 else聽聽
聽聽聽聽聽聽 begin聽聽
聽聽聽聽聽聽聽聽聽聽tmp[t]:=a[j];
聽聽聽聽聽聽聽聽聽聽inc(j);聽聽
聽聽聽聽聽聽 end;聽聽
聽聽聽聽聽聽 inc(t);聽聽
聽聽聽聽end;聽聽
聽聽聽聽for i:=p to r do a[i]:=tmp[i];
end;{merge}
procedure merge_sort(var a:listtype; p,r: integer); {鍚堝茍鎺掑簭a[p..r]}
var q:integer;
begin聽聽
聽聽聽聽if p< >r then聽聽
聽聽聽聽begin聽聽
聽聽聽聽聽聽 q:=(p+r-1) div 2;聽聽
聽聽聽聽聽聽 merge_sort (a,p,q);聽聽
聽聽聽聽聽聽 merge_sort (a,q+1,r);聽聽
聽聽聽聽聽聽 merge (a,p,q,r);聽聽
聽聽聽聽end;
end;
{main}
begin聽聽
聽聽聽聽merge_sort(a,1,n);
end.
聽聽 writeln(tot);
end;聽聽聽聽聽聽