Noip常用算法大全 联系客服

发布时间 : 星期六 文章Noip常用算法大全更新完毕开始阅读

inc(L.len); end;

3.单链表的删除操作

procedure delete(L:linklist; I:integer); var p,q:pointer; begin

p:=loc(L,I-1); q:=p^.next;

p^.next:=q^.next; dispose(q); dec(L.len); end;

4.双链表的插入操作(插入新结点q) p:=loc(L,I); new(q); q^.data:=x; q^.pre:=p;

q^.next:=p^.next; p^.next:=q; q^.next^.pre:=q;

5.双链表的删除操作

p:=loc(L,I); {p为要删除的结点} p^.pre^.next:=p^.next; p^.next^.pre:=p^.pre; dispose(p);

关键路径(最长路经):

var a,b:array [1..10,1..10] of integer; n,last,out:integer;

q,c:array [1..10] of integer; o:set of 1..10;

procedure init; var i,j:integer; begin

readln(n);

for i:=1 to n do for j:=1 to n do read(a[i,j]);

last:=0;

o:=[]; out:=0; b:=a; end;

procedure sort; var i,j:integer; p:boolean; begin

while out<>n do begin

for i:=1 to n do

if not (i in o) then begin

p:=true;

for j:=1 to n do

if a[j,i]=1 then begin p:=false; break; end;

if p then begin inc(last); q[last]:=i; inc(out); o:=o+;

fillchar(a,sizeof(a),0); end;

end;

end; end;

procedure work_1; var i,j,t,k:integer; begin

a:=b; c[1]:=0;

for i:=1 to n do begin k:=0;

for j:=1 to i-1 do

if (a[q[j],q]>0) and (a[q[j],q]+c[q[j]]>k) then k:=a[q[j],q]+c[q[j]];

c[q]:=k;

end; end;

procedure work_2; var i,j,k:integer; begin

writeln(q[n]);

for i:=n-1 downto 1 do begin

k:=maxint;

for j:=i+1 to n do

if (a[q,q[j]]>0) and (c[q[j]]-a[q,q[j]]

if c[q]=k then writeln(q,' '); c[q]:=k;

end; end;

begin

init; sort; work_1; work_2;

end.

拓扑排序:

var a:array [1..100,1..100] of 0..1; n:integer;

p:set of 1..100;

procedure init; var i,j,k:integer; begin

fillchar(a,sizeof(a),0); readln(n);

for i:=1 to n do begin read(k);

while k<>0 do begin a[i,k]:=1; read(k); end; end; p:=[]; end;

procedure search;

var i,j,t,sum,printed:integer; begin

printed:=0;

while printed

for j:=1 to n do sum:=sum+a[j,i]; if (sum=0) and not(i in p) then begin write(i,' '); p:=p+;

inc(printed);

for t:=1 to n do a[i,t]:=0; end; end; end;

begin init; search; end.