IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задча на граф
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Люди помогите пожалуйста решить задачу: Проверьте, содержит ли граф, заданный с помощью списков инцидентности, вершину, в которую входят дуги от всех остальных вершин графа, но из которой не исходит ни одна дуга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
сообщение
Сообщение #2


Гость






Что такое список инцидентности - знаешь? Реализация этого списка есть у тебя? Где, собственно, граф, который надо проверить?

Если знаешь, что такое списки инцидентности - то задачу решишь без труда. Достаточно просто пройти по массиву указателей, и проверить, есть ли там указатели, равные Nil... Если таких нет - то из каждой вершины что-то да выходит, ответ на твой вопрос - "Нет". Если nil есть (причем ровно 1 - больше тоже быть не должно, подумай, почему) - то ходить по всем указателям, не равным Nil, как по спискам, и проверять, есть ли в каждом из списков вершина с индексом, равным индексу того самого злополучного Nil-а. Если везде, во всех просмотренных списках есть такая вершина - значит, ответ "Да", иначе - опять "Нет". На этот раз ответ окончательный, больше ничего проверять не надо...

Все просто, как видишь. Осталось всего лишь этот алгоритм запрограммировать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






За алгоритм спасибо, а как это организовать на паскале?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вообще-то задачу дали тебе, а не мне, правда?

Вот так реализуется алгоритм:
function f(const mx: TIncidence): boolean;
var
count: integer;
i, Vx: Vertexes;
found: boolean;
p: PList;
begin
f := false;

count := 0;
for i := 1 to LastVertex do
if mx[i] = nil then
begin
Inc(count); Vx := i;
end;

if count > 1 then exit { <-- result = false }
else begin

for i := 1 to LastVertex do
if i <> Vx then
begin
p := mx[i];
found := false;
while (p <> nil) and (not found) do
begin
if p^.Vertex = Vx then found := true;
p := p^.next;
end;

if not found then exit; { <-- result = false }
end;

end;

f := true;
end;


Но чтобы проверить его работоспособность, тебе придется самому описать тип TIncidence и все остальные, а также написать основную программу так, чтобы эта программа хотя бы откомпилировалась. Кроме этого, матрицу инцидентности еще придется заполнить, чтобы проверить, правильно ли функция отрабатывает (на нескольких вариантах, разумеется, когда она должна возвращать "истину", и когда - "ложь"). Но все это - уже самостоятельно. Я ни за кого задачи не решаю полностью. Халявы не будет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.05.2024 2:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name