bor

1A : Neighbours

bor
Dec 19th, 2012
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.51 KB | None | 0 0
  1. program Neighbours;
  2.  
  3. const V = 100000;
  4.  
  5. type
  6.   (* StackNodePtr это указатель на StackNode. *)
  7.   StackNodePtr = ^StackNode;
  8.   (* StackNode тип который состоит из двух переменных. *)
  9.   StackNode = record
  10.     prev : StackNodePtr;
  11.     value : Longint;
  12.   end;
  13.  
  14. var n, m, i, a, b : Longint;
  15.   ptr : StackNodePtr;
  16.   graph : array [1..V] of StackNodePtr; (* Голова (верхушка) стека *)
  17.  
  18. (* Вставляет в верхушку стека новое число inbound. *
  19.  * Возвращает новую верхушку стека. *)
  20. function Push(head : StackNodePtr; inbound : Longint) : StackNodePtr;
  21. var newb : StackNodePtr;
  22. begin
  23.   new(newb); (* Выделяем память для нового элемента *)
  24.   newb^.value := inbound; (* Заносим число *)
  25.   newb^.prev := head; (* Делаем указатель на старую верхушку *)
  26.   Push := newb; (* Теперь верхним элементом будет новый *)
  27. end;
  28.  
  29. (* Берёт число из верхушки стека и возвращает его.
  30.  * Не вызывайте эту функцию, если стек пуст! *)
  31. function Top(head : StackNodePtr) : longint;
  32. begin
  33.   Top := head^.value; (* Просто берём число с верхушки *)
  34. end;
  35.  
  36. (* Удаляет верхний элемент стека.
  37.  * Возвращает новую верхушку стека.
  38.  * Не вызывайте эту функцию, если стек пуст! *)
  39. function Pop(head : StackNodePtr) : StackNodePtr;
  40. begin
  41.   Pop := head^.prev; (* Новая верхушка теперь по указателю prev. *)
  42. end;
  43.  
  44. begin
  45.   Readln(n, m);
  46.   (* Зануляем граф. Вначале он пуст *)
  47.   for i := 1 to n do begin
  48.     graph[i] := nil;
  49.   end;
  50.   while m <> 0 do begin
  51.     Dec(m);
  52.     Readln(a, b); (* Читаем ребро *)
  53.     (* Записываем, что вершина a связана с b и наоборот *)
  54.     graph[a] := Push(graph[a], b);
  55.     graph[b] := Push(graph[b], a);
  56.   end;
  57.   for i := 1 to n do begin
  58.     a := 0; (* Зануляем счётчик соседей *)
  59.     ptr := graph[i]; (* Берём первого соседа *)
  60.     while ptr <> nil do begin (* Пока сосед существует ... *)
  61.       Inc(a); (* Считаем его *)
  62.       ptr := Pop(ptr); (* И переходим к следующему *)
  63.     end;
  64.     Writeln(a);
  65.   end;
  66. end.
Advertisement
Add Comment
Please, Sign In to add comment