Написать программу с использованием алгоритма обхода графа в ширину - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Написать программу с использованием алгоритма обхода графа в ширину.За ранее спасибо

Решение задачи: «Написать программу с использованием алгоритма обхода графа в ширину»

textual
Листинг программы
  1. Program P28;
  2.  
  3. Const MAX_VERT = 100;
  4.  
  5. Var LstS    : Array[1..MAX_VERT,1..MAX_VERT] of integer;
  6. Var Chk     : Array[1..MAX_VERT] of integer;
  7. Var Que     : Array[1..MAX_VERT] of integer;
  8. Var ptrQ       : integer;
  9. Var CurrN      : integer;
  10. Var finp         : Text;
  11. Var i,j,l,k        : integer;
  12. Var Stri,s,tmp : String;
  13.  
  14. Procedure Enque(n : integer);
  15. Begin
  16.       ptrQ:=ptrQ+1;
  17.       Que[ptrQ]:=n;
  18.       Chk[n]:=1;
  19. End;
  20.  
  21. Function Deque : integer;
  22. Var k,i : integer;
  23. Begin
  24.     k:=Que[1];
  25.     for i:=2 to ptrQ Do Que[i-1]:=Que[i];
  26.     ptrQ:=ptrQ-1;
  27.     Deque:=k;
  28. End;
  29.  
  30. Function isBound(i,j : integer) : Boolean;
  31. Var k : integer;
  32. Begin
  33.      for k:=1 to CurrN Do
  34.          if LstS[i,k]=j Then Begin
  35.             isBound:=True;
  36.             exit;
  37.          End;
  38.      For k:=1 to CurrN Do
  39.          if LstS[j,k]=i Then Begin
  40.             isBound:=True;
  41.             exit;
  42.          End;
  43.      isBound:=False;
  44. End;
  45.  
  46.  
  47. Procedure BFS(n : integer);
  48. Var i,j : integer;
  49.  
  50. Begin
  51.  
  52.     Enque(n);
  53.    
  54.     While (ptrQ > 0) Do Begin
  55.  
  56.           k:=Deque();
  57.          
  58.           for i:=1 to  CurrN Do
  59.               if (Chk[i]=0) And (isBound(i,k)) Then Begin
  60.                  writeln(k,' - ',i);
  61.                  Enque(i);
  62.               End;
  63.          
  64.     End;
  65.  
  66. End;
  67.  
  68. Begin
  69.  
  70.     for i:=1 to MAX_VERT Do Begin
  71.         Chk[i]:=0;
  72.         Que[i]:=0;
  73.         for j:=1 to MAX_VERT Do
  74.             Lsts[i,j]:=0;
  75.     end;
  76.  
  77.     ptrQ:=0;
  78.  
  79.     assign(finp,'graph.txt');
  80.     reset(finp);
  81.  
  82.     readln(finp,CurrN);
  83.  
  84.     for i:=1 to CurrN Do Begin
  85.         readln(finp,Stri);
  86.         Stri:=Stri+',';
  87.         l:=length(Stri);
  88.         tmp:='';
  89.         k:=1;
  90.         for j:=1 to l Do Begin
  91.             s:=Stri[j];
  92.             if s <> ' ' then
  93.                if s = ',' then Begin
  94.                   if tmp <> '' then Begin
  95.                      Lsts[i,k]:=strToint(tmp);
  96.                      tmp:='';
  97.                      k:=k+1;
  98.                   End;
  99.                 End
  100.                Else
  101.                   tmp:=tmp+s;
  102.         End;
  103.     End;
  104.  
  105.     Close(finp);
  106.  
  107.     BFS(1);
  108.  
  109.     writeln;
  110.  
  111. End.

Объяснение кода листинга программы

Программа написана на языке Pascal ABC и предназначена для обхода графа в ширину (BFS). Она использует массив LstS для хранения ребер графа, где LstS[i,j] равно 1, если существует ребро между вершинами i и j, и 0 в противном случае. Константа MAX_VERT определяет максимальное количество вершин в графе. Массивы Chk, Que и ptrQ используются для реализации очереди и указателя на вершину в графе. Функция Enque добавляет новую вершину в очередь. Функция Deque извлекает и удаляет первую вершину из очереди. Функция isBound проверяет, является ли текущая вершина соседней для заданной вершины. Процесс BFS начинается с вершины n и продолжается до тех пор, пока в очереди остаются вершины. Он извлекает вершину из очереди, проверяет, является ли она соседней для текущей вершины, и если да, то печатает их индексы и добавляет текущую вершину в очередь. В начале программы все вершины и ребра графа инициализируются. Затем программа считывает из файла информацию о количестве вершин и сохраняет ее в переменной CurrN. Затем программа считывает имена вершин из файла и сохраняет их в массиве Stri. Она затем обрабатывает каждую вершину, считывая ее координаты и добавляя их в массив LstS. В конце программы выполняется BFS, начиная с вершины 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы