Хелпикс

Главная

Контакты

Случайная статья





Отчет о лабораторной работе №5



 

 

Пензенский государственный университет

Кафедра "Информационно-вычислительные системы"

Отчет о лабораторной работе №5

по дисциплине «Теория алгоритмов»

 

 

Выполнили: ст-ты гр.20КП01

Поляков С.А. Козылов Ю.И.

Проверил: доцент каф. ИВС

      Дрождин В.В.

 

 


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

 

В ориентированном графе общего вида G с вершинами vi Î V (|V| ≤ 100) и дугами ek Î E (|E| ≤ 200) определите количество компонентов связности. Опре-деление: граф общего вида – это дерево, сеть, граф с циклами и граф с несколь-кими компонентами связности.

 

2 Техническое задание

 

2.1 Требования к программе

 

Граф вводится вручную с клавиатуры.

По результатам анализа графа Gпрограмма должна определить  множество вершин, достижимых из корня за количество шагов, не превышающих k.

 

2.2 Порядок контроля и приёмки

 

Для контроля правильности работы программы необходимоввести данные и запустить программу на выполнение. По результатам анализа графа программа выдает сообщение с множеством вершин достижимых из корня за количество шагов, не превышающих k.Если результат совпадет с тестовыми данными, то это означает, что программа работает корректно.

 


 

3 Описание программы

 

3.1 Общие сведения

 

Программа разработана в средеMicrosoftVisualStudio 2019.Текст программы приведен в приложении А.

 

3.2 Функциональное назначение

 

Программа предназначена для анализа графа и принятия решения: вывода вершин достижимых из корня за количество шагов, не превышающих

 

Рисунок 1. Блок схема.

 

4 Программа и методика испытаний

 

При проверке работы программы получены результаты, приведенные в приложении Б, в которых заданные исходные данные и результатысовпадают. Таким образом, можно сделать вывод, что программа работает корректно.

 

5 Описание применения

 

После запуска программы на выполнениесистема запрашивает количество вершин, рёбер, а также запрашивает ввести вершины рёбер(см. Приложение Б).

 

Заключение

 

В ходе выполнения лабораторной работыразработано техническое задание на решение задачи, разработан алгоритм решения задачи,осуществляющий чтение описания неориентированного графаи его анализ, составлена и отлажена программа, и оформлена программная документация. Проведенные испытания показали, что программа работает корректно.


 

 

ТЕКСТ ПРОГРАММЫ

Приложение А

(обязательное)


 

#include <iostream>

using namespace std;

intmain()

{

int v, e;

cout<< "Введите количество вершин графа" <<endl;

cin>> v;

cout<< "Введите количество рёбер графа" <<endl;

cin>> e;

int m[v][v];

int z[v+1];

for (inti=0; i<v; i++)

{

for (int j=0; j<v; j++)

m[i][j]=0;

z[i]=0;

}

for (inti=0; i<e; i++)

{

int a, b;

cout<< "Введите первую вершину ребра " << i+1 <<endl;

cin>> a;

cout<< "Введите вторую вершину ребра " << i+1 <<endl;

cin>> b;

m[a-1][b-1]=1;

m[b-1][a-1]=1;

}

z[0]=1;

bool f = true;

int k = 0;

while (f)

{

for (inti=0; i<v; i++)

  if (m[k][i]==1&&z[i]==0)

    z[i]=1;

z[k]=2;

  f = false;

  for (inti=0; i<v; i++)

    if (z[i]==1)

    {

      k=i;

      f = true;

      break;

    }

}

for (inti=0; i<v; i++)

if (z[i] == 0)

{

cout<< "Граф не связанный" <<endl;

return 0;

}

z[0]=0;

z[1]=0;

k=0;

int s[v];

for (inti=0; i<v; i++)

{

s[i]=0;

for (int j=0; j<v; j++)

   s[i] += m[i][j];

}

while (k>=0)

{

for (inti=z[k+1]+1;i<=v;i++)

   {

     if (i==v)

       k--;

     else if (i!=z[k]&&m[i][z[k]]==1&&s[i]>2)

     {

       f = true;

       for (int j=0;j<k;j++)

         if (z[j]==i)

         {

           f=false;

           if (k-j>1&&z[j+1]<z[k])

           {

             for (int l=j; l<=k; l++)

cout<< z[l]+1 << " ";

cout<< z[j]+1 <<endl;

           }

           }

     if (f)

       {

         z[++k]=i;

         z[k+1]=-1;

         break;

}

             }

   }

}

 

РЕЗУЛЬТАТЫ ИСПЫТАНИЙ

Приложение Б

(обязательное)


 

 

Рисунок



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.