Графы. Алгоритм обхода графа а глубину

Автор работы: Пользователь скрыл имя, 18 Декабря 2010 в 14:29, реферат

Краткое описание

Теория графов находит применение, например, в геоинформационных системах (ГИС). Существующие или вновь проектируемые дома, сооружения, кварталы и т. п. рассматриваются как вершины, а соединяющие их дороги, инженерные сети, линии электропередачи и т. п. — как рёбра. Применение различных вычислений, производимых на таком графе, позволяет, например, найти кратчайший объездной путь или ближайший продуктовый магазин, спланировать оптимальный маршрут.

Содержание работы

1.Введение
2.Из истории теории графов
3.Основные понятия теории графов
4.Способы представления графов в компьютере
5.Алгоритм обхода графа в глубину
6.Заключение
7.Список литературы

Содержимое работы - 1 файл

Курсовая.doc

— 128.50 Кб (Скачать файл)

       Далее приводится код программы на языке  C++, осуществляющий данный алгоритм, написанный в среде Microsoft Visual Studio 2005 

       #include <iostream>

       #include <vector>

       #include <math.h>

       #include <string>

       #include <stack>

       #define INF 1000000

       #define forn(i,n) for (int i=0;i<n;i++)

       #define forn1(i,n) for (int i=1;i<n;i++)

       #define NMAX 1000

       using namespace std;

       vector <int> g[NMAX]; //граф храним в массиве  векторов

       bool used[102];

       int p[102]; //массив предков

       void dfs(int v,int prev){ //рекурсивная функция, обходящая дерево в глубину, в неё передаём предка вершины и саму вершину

           if (!used[v]){ //если вершина не помечена

               used[v]=1;//помечаем её

               p[v]=prev;//для вершины v предок prev

               forn(i,g[v].size()) //проходимся по всем смежным вершинам

               dfs(g[v][i],v); //и запускаем функцию  из каждой из них

           }

           return;

       }

       int main()

       {

           freopen("input.txt","rt",stdin);

           freopen("output.txt","wt",stdout);

           int n,v1,v2;

           memset(p,255,sizeof(p));

           cin>>n>>v1>>v2;

           forn(i,n) //чтение графа

               forn(j,n)

       {

                   int k;

                   cin>>k;

                   if (k==1)

                       g[i].push_back(j);

         }

            dfs(0); //запускаем обход из нужной  вершины

           return 0;

       } 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Заключение

В работе были рассмотрены  элементы из теории графов, задачи, которые уже стали классическими, основные определения теории.  Также разобран алгоритм обхода графа в глубину, который представляет собой одну из основных задач программирования, связанного с теорией графов. Код данного алгоритма представлен на одном из современных и практикуемых языков программирования С++. 

Список  литературы

 
  1. Кристофидес Н. Теория графов: алгоритмический подход, Мир, 1978.
  2. Новиков Ф.А. Дискретная математика для программистов, Питер, 2001.
  3. Носов В.А. Комбинаторика и теория графов, МГТУ, 1999.
  4. Крячков А.В. Программирование на  С++ : практикум, Эксмо, 2003.
  5. Окулов С.М. Основы программирования, ЮНИМЕДИАСТАЙЛ, 2002

Информация о работе Графы. Алгоритм обхода графа а глубину