Задача перехода для ориентированного графа: матрица смежности - матрица инцидентности - Курсовая работа

бесплатно 0
4.5 159
Преобразование матрицы смежности ориентированного графа в матрицу инцидентности. Бьерн Страуструп как разработчик языка Си . Матрица Инцидентности как отношение между ребром и его концевыми вершинами. Листинг программы, руководство пользователя.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Матричная форма задания графов обладает достаточной наглядностью при любой степени сложности графа и, что самое важное, позволяет автоматизировать процесс обработки информации, представленной в терминах теории графов, - любая матрица графа может быть введена в ЭВМ. При задании графов в матричной форме могут учитываться либо отношения смежностей (вершин или ребер (дуг)), либо отображения инцидентности (вершин и ребер (дуг)). For - Цикл со счетчиком, в котором некоторая переменная изменяет свое значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз, в котором указывается счетчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счетчика) и, возможно, шаг, с которым изменяется счетчик If - Условный оператор реализует выполнение определенных команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. Инцидентность - отношение между ребром и его концевыми вершинами, т. е. если в графе - вершины, а - соединяющее их ребро, то вершина и ребро инцидентны, вершина и ребро также инцидентны. Матрицей инцидентности (инциденций) ориентированного графа называется матрица , для которой , если вершина является началом дуги , , если является концом дуги , в остальных случаях .На языке программирования C разработана программа перехода для ориентированного графа: матрица смежности - матрица инцидентности. Так же выяснили что по матрице смежности ребер графа (орграфа) всегда можно определить ребра графа (дуги орграфа) как пары инцидентных им вершин, а для графов с параллельными ребрами (дугами), кроме того, и кратности ребер (дуг).

Введение
В теоретико-множественной и геометрической форм определения (задания) графов, часто используется матричная форма их представления. Существуют различные виды матриц графов, однако все они, как правило, полностью передают основные свойства графов. Матричная форма задания графов обладает достаточной наглядностью при любой степени сложности графа и, что самое важное, позволяет автоматизировать процесс обработки информации, представленной в терминах теории графов, - любая матрица графа может быть введена в ЭВМ.

При задании графов в матричной форме могут учитываться либо отношения смежностей (вершин или ребер (дуг)), либо отображения инцидентности (вершин и ребер (дуг)). В связи с этим матрицы графов делятся на два основных класса: матрицы смежностей и матрицы инциденций.

В данной работе рассматривается преобразование матрицы смежности ориентированного графа в матрицу инцидентности.

1. Математическая часть

2. Описание используемого программного обеспечения

Разработчиком языка Си является Бьерн Страуструп. В своей работе он опирался на опыт создателей языков Симула, Модула 2, абстрактных типов данных. Основные работы велись в исследовательском центре компании Bell Labs.

Непосредственный предшественник Си - язык Си с классами - появился в 1979 году, а в 1997 году был принят международный стандарт Си , который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка Си . Не менее важным результатом стандартизации стало то, что в процессе выработки и утверждения стандарта язык был уточнен и дополнен рядом существенных возможностей.

Язык Си является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек. Поэтому, строго говоря, он позволяет решить практически любую задачу программирования. Тем не менее, в силу разных причин (не всегда технических) для каких-то типов задач он употребляется чаще, а для каких-то - реже.

Си как преемник языка Си широко используется в системном программировании. На нем можно писать высокоэффективные программы, в том числе операционные системы, драйверы и т.п. Язык Си - один из основных языков разработки трансляторов.

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

Распределенные системы, функционирующие на разных компьютерах, также разрабатываются на языке Си . Этому способствует то, что у широко распространенных компонентных моделей CORBA и COM есть удобные интерфейсы на языке Си .

Обработка сложных структур данных - текста, бизнес-информации, Internet-страниц и т.п. - одна из наиболее распространенных возможностей применения языка. В прикладном программировании, наверное, проще назвать те области, где язык Си применяется мало.

Разработка графического пользовательского интерфейса на языке Си выполняется, в основном, тогда, когда необходимо разрабатывать сложные, нестандартные интерфейсы. Простые программы чаще пишутся на языках Visual Basic, Java и т.п.

В целом надо сказать, что язык Си в настоящее время является одним из наиболее распространенных языков программирования в мире.

3. Используемые функции

# include - обеспечивает преимущества использования заголовочных файлов, которые содержат операторы C или программные определения.

Cout - выводит сообщение, которое запрашивает какие-либо данные.

Cin - чтение введенных данных.

For - Цикл со счетчиком, в котором некоторая переменная изменяет свое значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз, в котором указывается счетчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счетчика) и, возможно, шаг, с которым изменяется счетчик If - Условный оператор реализует выполнение определенных команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true.

4. Решение задачи вручную

Рис. 1

Дан ориентированный граф с 5 вершинами и 6 маршрутами. Построим матрицу смежности: Для графов без петель и кратных ребер матрица смежности бинарна (состоит из нулей и единиц), причем ее главная диагональ целиком состоит из нулей.

Матрицей смежности вершин ориентированного графа G называется квадратная матрица A(G)=[aij] порядка n (n - число вершин графа), элементы которой aij равны числу дуг, исходящих из вершины xi и заходящих в вершину xj.

Из определения следует, что сумма элементов i-й строки матрицы A(G) орграфа равна полустепени исхода d (xi), а по i-му столбцу - полустепени захода d-(xi). По-прежнему элементы этой матрицы - целые положительные числа и число ноль. Матрица смежностей вершин орграфа может оказаться симметричной относительно главной диагонали лишь в редких частных случаях.

Сумма элементов -й строки равна , то есть

Аналогично сумма элементов -го стоблца равна , то есть .

Следовательно, матрица смежности примет вид: 0 0 1 0 0

1 0 0 0 0

0 0 0 1 0

1 0 0 0 0

1 1 0 0 0

Исходя из матрицы смежности мы можем построить матрицу инцидентности.

Инцидентность - отношение между ребром и его концевыми вершинами, т. е. если в графе - вершины, а - соединяющее их ребро, то вершина и ребро инцидентны, вершина и ребро также инцидентны.

Необходимо отметить, что между строками матрицы инцидентности B(G) существует очевидная зависимость. Так как каждый столбец этой матрицы содержит только два единичных элемента или состоит только из нулей, если столбец соответствует петле, то сумма по модулю 2 всех строк равна нулю. Поэтому без потери информации о графе вместо матрицы B(G) можно рассматривать сокращенную матрицу Bo(G), получаемую из B(G) вычеркиванием любой строки (чаще всего вычеркивается последняя строка). Таким образом, из p строк матрицы B(G) связного графа (см. п. 5) одна строка всегда линейно зависима, т.е. ранг матрицы B(G) не может превышать p-1 (ранг матрицы B(G) в точности равен p-1).

Матрицей инцидентности (инциденций) ориентированного графа называется матрица , для которой , если вершина является началом дуги , , если является концом дуги , в остальных случаях .

Элементы матрицы определяются следующим образом: i1, если вершина xi является началом дуги ej bij =i-1, если вершина xi является концом дуги ej;

0, если вершина xi не инцидентна дугу ej .

Матрица инцидентности данного орграфа имеет вид: -1 1 -1 0 -1 0

1 0 0 -1 0 0

0 -1 0 0 0 1

0 0 1 0 0 -1

0 0 0 1 1 0

5. Листинг программы

#include

#include

#include

#include

#include

#include

#pragma hdrstop

//-----------------------------------------------------#pragma argsused char* rus(const char* text)

{char *BUFRUS=new char[strlen(text)];

CHARTOOEM(text, BUFRUS);

return BUFRUS;} int main(int argc, char* argv[])

{int **matrix, **matrix1, **smej, *mat, str[30], n=0, m=0, i=0, j=0, mg=0, t=0, y=0, k=0, g=0, v=0, q;

cout<<rus("Введите количество остановок: ");

cin>>n;

cout<<rus("Введите количество маршрутов: ");

cin>>m;

for (i = 0; i < m; i ) { cout<<rus("Введите количество остановок в ")<<i 1<< rus(" маршруте: ");

cin>>str[i];

t=str[i] t-1;

g=g str[i];} mat=new int[g];

for (i = 0; i < m; i ){ cout<<rus("Остановки ")<<i 1<<rus("-ого маршрута через пробел")<<endl;

for (j = 0; j >mat[y];y ;}} matrix1=new int*[2];

for(i=0;i<2;i ) matrix1[i]=new int[t];

matrix1[0][0]=mat[0]; matrix1[1][0]=mat[1];

mg=str[0]-1;

for (j=1; j<t; j )

{i=0; if (j==mg){k ; matrix1[i][j]=mat[j k]; matrix1[i 1][j]=mat[j 1 k];mg=str[k]-1 mg;} else { matrix1[i][j]=mat[j k]; matrix1[i 1][j]=mat[j k 1];}} cout<<rus("Матрица инцедентности вершин ребрам")<<endl;

for(int i=0; i<2; i ){ for(int j=0; j<t; j ){ cout<<setw(4)<<matrix1[i][j];} cout<<"



";} matrix=new int*[n];

for(i=0;i<n;i ) matrix[i]=new int[t];

cout<<rus("Матрица смежности вершин ")<<endl;;

smej=new int*[n];

for(i=0;i<n;i ) smej[i]=new int[n];

{cout<<rus("орграфа")<<endl;

for(int i=0; i<n; i ){ for(int j=0; j<n; j ){ smej[i][j]=0;

for(int x=0; x<1; x){ for(int b=0; b<t; b ){ if (i 1==matrix1[x][b] && j 1==matrix1[x 1][b]) {smej[i][j]=1;}}}}}} for(i=0; i<n; i ){ for(j=0; j<n; j ){ cout<<setw(4)<<smej[i][j];} cout<<"



";} cout<<rus("Матрица инцидентности ")<<endl;

{cout<<rus("орграфа")<<endl;

for(int j=0; j<t; j ){ for(int i=0; i<n; i ){matrix[i][j]=0;

for(int x=0; x<1; x){if (i 1==matrix1[x][j]){matrix[i][j]=1;} } for(int x=1; x<2; x){if (i 1==matrix1[x][j]){matrix[i][j]=-1;} }}}} for(i=0; i<n; i ){ for(j=0; j<t; j ){cout<<setw(4)<<matrix[i][j];} cout<<"



";} system("pause");

return 0;} матрица идентичность программа листинг

6. Руководство пользователя

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

Рис. 2

После нажатия любой клавиши программа завершает свою работу.

Вывод
На языке программирования C разработана программа перехода для ориентированного графа: матрица смежности - матрица инцидентности. Так же выяснили что по матрице смежности ребер графа (орграфа) всегда можно определить ребра графа (дуги орграфа) как пары инцидентных им вершин, а для графов с параллельными ребрами (дугами), кроме того, и кратности ребер (дуг).

Однако если ребра (дуги) были пронумерованы, то восстановить их номера по матрице смежности невозможно. В этом смысле матрица инцидентности оказывается более информативной, чем матрица смежности, поскольку позволяет получить полную информацию о ребрах (дугах), включая их нумерацию.

Рассмотренные в этом параграфе матрицы графов играют большую роль в теории графов. Существуют и другие матрицы графов, однако их роль менее значительна.

Список литературы
1. Нейбауэр. А. моя первая программа на С/С ./ Пер. с англ. - СПБ.: Питер, 1996.

2. Штилт. Г. Самоучитель С 3-е изд./ Пер. с англ. - СПБ.: BHV-Санкт-Петербург, 1998.

3. Подбельский В.В., Фомин С.С. Программирование на языке СИ - М.: Финансы и статистика, 1999.

4. Подбельский В.В. Язык Си . - М.: Финансы и статистика, 1999.

5. Касаткин А.И., Вальвачев А.Н. от Turbo C к Borland C / Под ред. А.И. Касаткина, - Минск: Вышейшая школа, 1992.

6. Березин Б.И., Березин С.Б. Начальный курс С и С . - М.: Диалог-Мифи, 1996.

Размещено на .ru

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?