Пример: Транспортная логистика
Я ищу:
На главную  |  Добавить в избранное  

Программированиеи компьютеры /

Объектно-ориентированное программирование: задача проверки графа на автоморфность (Си)

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИСТЕТ

кафедра прикладной математики и информатики

Расчетно-графическая работа

по дисциплине «Объектно-ориентированное программирование»

Факультет: ПМИ

Группа: ПМ-92

Студент: Мульцын К.А.

Преподаватель: Лисицин

г. Новосибирск, 2000

1. Условие задачи

Определить, является ли данный граф автоморфным.

2. Анализ задачи

Дано: граф

Результат: логическое значение

Связь: ИСТИНА, если граф автоморфный, ЛОЖНО в обратном случае.

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

Такая постановка задачи уже дает вариант ее решения. Граф мы будем представлять матрицей смежности и вот по каким соображениям. Перестановку i-ой и j-ой вершин и «наложение» можно осуществить путем перестановки i-ых и j-ый строк и столбцов матрицы смежности и сравнением ее с исходной. Если матрицы совпадут, то мы получили автоморфизм.

К сожалению, никакой другой идеи, кроме полного перебора, предложить нельзя. Проанализируем затраты времени. Т.к. нам нужно получить все перестановки из n вершин, то время мы на это потратим пропорциональное n! Таким образом, для больших n задача будет решаться очень долго. Но при n10 время решения удовлетворительно.

Теперь обсудим представление данных. Во-первых, пользователь должен ввести исходный граф, и делает он это следующим образом: он вводит (с клавиатуры, или из файла) пары натуральных чисел, a и b, которые означают, что между вершинами a и b есть ребро. Далее граф для наглядности рисуется на экране, а затем производится процесс вычислений. Если граф получился автоморфным, то выводится автоморфизм, как соответствие вершин.

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

3. Алгоритм решения задачи

НАЧАЛО

загружаем граф

выводим его на экран

создаем копию исходного графа

ПОКА

не перебрали все перестановки

ИЛИ не нашли автоморфизм

ДЕЛАЕМ

следующую перестановку

сравниваем перестановку с исходным графом

ЕСЛИ они равны ТО мы нашли автоморфизм

выводим сообщение о результате работы

КОНЕЦ

4. Текст программы

#include

#include

#include

#include

#include

#define PI 3.1415926

class matrix { // Используется для представления

private: // графа.

int p[30][30]; // Матрица представлена статическим

int n,m; // массивом. N,M - размерность.

public:

matrix(int a=10, int b=10) // Конструктор

{ // Обнуляет все эл-ты

int i,j;

n=a; m=b;

for (i=1;i




Copyright © 2005—2007 «Mark5»