Реализация основных операций над графами, представленных в виде матриц смежностей

Автор: Пользователь скрыл имя, 03 Апреля 2011 в 18:46, курсовая работа

Описание работы

Первая работа по теории графов, принадлежащая известному швейцарскому математику Л. Эйлеру, появилась в 1736 г. Толчок к развитию теория графов получила на рубеже ХIX и ХХ столетий, когда резко возросло число работ в области топологии и комбинаторики, с которыми ее связывают самые тесные узы родства. Графы стали использоваться при построении схем электрических цепей и молекулярных схем. Как отдельная математическая дисциплина теория графов была впервые представлена в работе венгерского математика Кенига в 30-е годы ХХ столетия.

Содержание

ЗАДАНИЯ. - 2 -
РЕФЕРАТ - 3 -
СОДЕРЖАНИЕ. - 4 -
ВВЕДЕНИЕ - 5 -
1 РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РЕАЛИЗАЦИИ ГРАФА. - 6 -
1.1 АНАЛИЗ МАТЕМАТИЧЕСКИХ ТРЕБОВАНИЙ. - 8 -
1.2 КОДИРОВАНИЕ. - 18 -
1.3 ТЕСТИРОВАНИЕ. - 19 -
ЗАКЛЮЧЕНИЕ. - 21 -
ПРИЛОЖЕНИЕ А. - 22 -
ПРИЛОЖЕНИЕ Б. - 23 -
ПРИЛОЖЕНИЕ В. - 28 -
СПИСОК ЛИТЕРАТУРЫ: - 32 -

Работа содержит 1 файл

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ.doc

— 1.53 Мб (Скачать)

}

void MatrixGraph::addNode(int n)

{ 

      int temp_n=n,countVertex;

      temp_n--;

      int** tempgraph;

      if(temp_n<=0)

      {

            return;

      }

      if(temp_n>0&&temp_n<vertexNumber)

      { 

            if(graph[temp_n][temp_n]==-1)

            {

                  deleteNode(temp_n,false);

            }

      }

      else

      {

            countVertex=n-vertexNumber;

            n=countVertex+vertexNumber;

            tempgraph=new int*[n];

            for(int i=0;i<n;i++)

            {

                  tempgraph[i]=new int[n]; 

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

                  {

                        tempgraph[i][j]=0;

                  }

            }

            for(int i=0;i<vertexNumber;i++)

            {

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

                  {

                        tempgraph[i][j]=graph[i][j];

                  }

            }

            delete [] graph;

            graph=tempgraph;

            vertexNumber+=countVertex;

      }

}

void MatrixGraph::deleteNode(int n,bool flag)

{

      if(n<0||n>=vertexNumber)

      {

            return;

      }

      if(flag)

      {

            for(int i=0;i<vertexNumber;i++)

            {

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

                  {

                        graph[i][n]=-1;

                        graph[n][j]=-1;

                  }

            }

      }

      else

      {

            for(int i=0;i<vertexNumber;i++)

            {

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

                  {

                        graph[i][n]=0;

                        graph[n][j]=0;

                  }

            }

      }

}

void MatrixGraph::PrintMatrix()

{

      for(int i=0; i<=vertexNumber; i++)

      {

            cout.width(3);

            if(i==0){cout<<"       "; i++;}

            cout<<"X"<<i;

      }

      cout<<endl<<endl;

      for(int i=0;i<vertexNumber;i++)

      {

            cout.width(4);

            cout<<"X"<<i+1;

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

            {

                  cout.width(4);

                  if(graph[i][j]==-1)

                  {

                        cout<<"#";

                  }

                  else

                  {

                        cout<<graph[i][j];

                  }

            }

            cout<<endl<<endl;

      }

}

void MatrixGraph::addArc(int from,int to)

{

      if(from<0||from>=vertexNumber||to<0||to>=vertexNumber)

            return;

      graph[from][to]=1;

}

void MatrixGraph::deleteArc(int from,int to)

{

      if(from<0||from>=vertexNumber||to<0||to>=vertexNumber)

      return;

      graph[from][to]=0;

}

int MatrixGraph::hasArc(int from,int to)

{

      if(from<0||from>=vertexNumber||to<0||to>=vertexNumber)

      return false;

      return graph[from][to];

}

void MatrixGraph::ComplementGraph()

{

      for(int i=0;i<vertexNumber;i++)

      {

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

            {

                  if(graph[i][j]==0)

                  {

                        graph[i][j]=1;

                  }

                  else

                  {

                        if(graph[i][j]==1)

                        {

                              graph[i][j]=0;

                        }

                  }

            }

      }

      for(int i=0;i<vertexNumber;i++)

      {

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

            {

                  if(i==j)

                  {

                        graph[i][j]=0;

                  }

            }

      }

}

void MatrixGraph:: ShowUnion(MatrixGraph a)

{

      int max,min;

      a.Size()>vertexNumber ? max=a.Size():max=vertexNumber;

      a.Size()<vertexNumber? min=a.Size():min=vertexNumber;

      MatrixGraph c(max);

      for(int i=0;i<max;i++)

      {

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

            {

                  if(a.hasArc(i,j)==1|| hasArc(i,j)==1)

                  {c.addArc(i,j); }

            }

      }

      c.PrintMatrix();

} 

Файл  «Kursach.cpp»

#include "stdafx.h"

#include<windows.h>

#include<iostream>

#include"MatrixGraph.h"

using namespace std;

void main()

{

      SetConsoleCP(1251);

      SetConsoleOutputCP(1251);

      MatrixGraph a(6),b(6); 

      a.addArc(0,1);

      a.addArc(1,2);

      a.addArc(1,4);

      a.addArc(2,3);

      a.addArc(3,2);

      a.addArc(4,0); 

      cout<<"Матрица А."<<endl;

      a.PrintMatrix();

      b.addArc(0,1);

      b.addArc(1,4);

      b.addArc(4,0);

      b.addArc(4,3);

      cout<<"Матрица B."<<endl;

      b.PrintMatrix();

      int n,from,to,vertex;

      do

      {

            cout.width(3);

            cout<<"///////////////////////////////////////\n";

            cout<<"// 1.Добавить дугу  в матрицу А.     //\n";

            cout<<"// 2.Удалить дугу из матрицы А.      //\n";

            cout<<"// 3.Добавить дугу  в матрицу B.     //\n";

            cout<<"// 4.Удалить дугу из матрицы B.      //\n";

Информация о работе Реализация основных операций над графами, представленных в виде матриц смежностей