⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex.dpr

📁 tongji acm-online judge solution
💻 DPR
字号:
program Ural_1022(Input, Output);
const
    MaxN = 100;
type
    TIndex = Byte;
    TAdjoinVextexPtr = ^TAdjoinVextex;
    TAdjoinVextex = record
        VextexIndex: TIndex;
        NextAdjoinVextex: TAdjoinVextexPtr;
    end;
    TVextexNode = record
        FirstAdjoinVextex: TAdjoinVextexPtr;
        Indegree: TIndex;
    end;
    TVextex = array[1..MaxN] of TVextexNode;
    TStack = array[1..MaxN] of TIndex;
var
    N: TIndex;
    Vextex: TVextex;
    Stack: TStack;

procedure Create_AdjoinList;
var
    i, T: TIndex;
    NewAdjoinVextex: TAdjoinVextexPtr;
begin
    FillChar(Vextex, SizeOf(Vextex), 0);
    Readln(N);
    for i := 1 to N do
    begin
        Vextex[i].FirstAdjoinVextex := nil;
        while true do
        begin
            Read(T);
            if T = 0 then
                Break;
            Inc(Vextex[T].Indegree);
            New(NewAdjoinVextex);
            NewAdjoinVextex^.VextexIndex := T;
            NewAdjoinVextex^.NextAdjoinVextex := Vextex[i].FirstAdjoinVextex;
            Vextex[i].FirstAdjoinVextex := NewAdjoinVextex;
        end;
    end;
end;

procedure Push(var StackTop: TIndex; const i: TIndex);
begin
    Inc(StackTop);
    Stack[StackTop] := i;
end;

function Pop(var StackTop: TIndex): TIndex;
begin
    Pop := Stack[StackTop];
    Stack[StackTop] := 0;
    Dec(StackTop);
end;

procedure TopologicalSort;
var
    i, j, M, StackTop: TIndex;
    CurrentVextex: TAdjoinVextexPtr;
begin
    Create_AdjoinList;
    FillChar(Stack, SizeOf(Stack), 0);
    StackTop := 0;
    for i := 1 to N do
        if Vextex[i].Indegree = 0 then
            Push(StackTop, i);
    M := 0;
    while not (StackTop = 0) do
    begin
        i := Pop(StackTop);
        Write(i, ' ');
        Inc(M);
        CurrentVextex := Vextex[i].FirstAdjoinVextex;
        while CurrentVextex <> nil do
        begin
            j := CurrentVextex^.VextexIndex;
            Dec(Vextex[j].Indegree);
            if Vextex[j].Indegree = 0 then
                Push(StackTop, j);
            CurrentVextex := CurrentVextex^.NextAdjoinVextex;
        end;
    end;
    //    Result := (M = N);
end;
begin
 {   Assign(Input, 'i.txt');
    Reset(Input);
    Assign(Output, 'o.txt');
    Rewrite(output);            }
    TopologicalSort;
 {   Close(Input);
    Close(Output); }
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -