name_r Name,otvet;
char isk[2];
clrscr();
f=fopen ("input.txt","r");
if (f==NULL) printf ("Файл ввода input.txt ненайден");
else
{
include (f,&T,&name);
rebra (&Name,T,&name);
printf ("Таблица инцидентности графа G\n");
print_table (T,name);
R=rebra_inc (Name);
printf ("\nТаблица инцидентности графа G'");
print_table_R (R,Name);
printf ("\nВведите искомую вершину ");
scanf ("\n%c",&isk[0]);
scanf ("\n%c",&isk[1]);
otvet=otv(R,Name,isk);
if (otvet.N==0) printf ("Ответ: Вершины ненайдены.");
else {printf ("Искомые вершины\n");
print_reb (otvet);
}
}
getch();
}
7. Набор тестов
Исходные данные |
Результат |
Файл input.txt: abcdefghi 010001101 101110000 010000000 010000000 010000000 100000010 100000000 000001000 100000000 Искомая вершина: bc |
Искомые вершины: af ag ai bd be ab |
Файл input.txt: abcdefghi 010001101 101110000 010000000 010000000 010000000 100000010 100000000 000001000 100000000 Искомая вершина: hf |
Искомые вершины: ab ag ai |
Файл input.txt: abcdefghi 010001101 101110000 010000000 010000000 010000000 100000010 100000000 000001000 100000000 Искомая вершина: nm |
Такой вершины не существует Ответ: Вершины не найдены |
Файл input1.txt: abc 010 101 010 Искомая вершина: ba |
Ответ: Вершины не найдены |
1.Условие задачи
По графу G построить граф G’ следующим образом: в качестве вершин в G’ берутся ребра графа G: две вершины в G’ смежны тогда и только тогда, когда смежны соответствующее ребра. В G’ найти все вершины расстояние от которых до некоторой выделенной равно 2.
2.Анализ задачи
Дано: вершины, таблица инцидентности графа G, вершина поиска
Результат: Сначала на экран выводится таблица инцидентности графа G потом G’, искомые вершины или сообщение о том, что таких нет.
Метод решения:
1. Составим таблицу инцидентность графа G’
Если две вершины A и B графа G смежны значит существует такая вершина AB графа G’. Смежность вершин A и B легко определит по таблице инцидентности графа G. Затем найдя все вершины G’ сравним их попарно, если в названии двух вершин существуют равные символы, то это вершины смежны.
2. Найдем необходимые вершины
Найдем все вершины смежные с вершиной поиска и запомним их (промежуточные вершины поиска). Удалим из таблицы инцидентности G’ все данные о вершине поиска. Далее найдем все вершины смежные с промежуточными и запомним их первые вхождения. Это и будут искомые вершины.
3.Используемые функции и их прототипы
void include (FILE *f,table_inc *T,vershin *name) - Функция ввода
void rebra (name_r *Name,table_inc T,vershin *name) - Функция перевода ребер в вершины (графа G в граф G')
table_inc rebra_inc (name_r Name) - Функция таблицы инцидентности для ребер
void print_table (table_inc T,vershin name) – Функция вывода таблицы инцидентности G
void print_table_R (table_inc R,name_r Name) – Функция вывода таблицы инцидентности G’
int search_reb (name_r Name,char isk[2]) - Функция поиска ребра в списке имен ребер и выводит порядковый номер ребра
name_r delete_reb (table_inc *R,name_r *Name,int k) - Функция удаления ребра из таблицы инцидентности
name_r otv (table_inc R,name_r Name,char isk[2]) – Функция поиска искомых вершин в G’
void print_reb (name_r Name) - Функция печатающая ответ
4. Структура данных
typedef struct name_r {char reb[n][2];int N;}; - Структура хранящая ребра
typedef struct vershin {char ver[n];int N;}; - Структура хранящая вершины
typedef struct table_inc {int znach[n][n]; int N;}; - Структура хранящая таблицу инцидентности
5. Алгоритм решения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.