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

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

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

> Теория графов., Раскраска карты минимальным кол_вом цветов
сообщение
Сообщение #1


Гость






Программа раскрашивания карты минимальным количеством цветов.

Исходные данные:

- Список регионов с указанием соседей каждого региона.

Выходные данные:

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

Требованния к фунуциональности:

- Эфективность решения.
- Наглядный вывод результата(раскраска карты).
- Опционально редактор карт(с возможностью рисовать мышью).

Вопрос следуюший, как сделать редактор карт с возможностью рисования мышью и удомным для пользователя меню.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Гость, ты много всего перечислил, и не совсем понятно, насколько тебя волнует основной алгоритм - процесс раскрашивания. Если волнует, то могу помочь с этим. Задача очень любопытная, меня заинтересовало уже то, что проблема четырех красок как раз не так давно была решена теоретически (с помощью компьютера, это как бы наглядный пример, как комп помогает в чистой математике), и захотелось самому прикоснуться.. smile.gif

Я тут набросал прогу, которая производит правильную (то есть соседние области - разноцветные) раскраску, не гарантируя минимальности количества цветов. Основной принцип - рекуррентная окраска областей. Написано без ООП, да и вообще довольно просто. Надеюсь, разберешься. А уж минимальность обеспечивай сам.. smile.gif (можешь задавать вопросы)

const
Nx=100; {максимальное число областей}

var
N, {реальное число областей}
i,j:integer;
Col:array[1..Nx]of byte; {массив цветов}
Nn:array[1..Nx]of byte; {сколько соседей у каждой области}
Nei:array[1..Nx,1..Nx]of byte; {массив соседей}
Trace:array[1..Nx]of boolean; {для отметки пройденных областей}
Empty:set of byte; {для очистки списка цветов}
f:text;

const
MaxCol:byte=0;

function Paint(m:byte):byte;
var
i:integer;
Used:set of byte;
begin
Used:=Empty; {очищаем список использованных цветов}
if Col[m]=0 then begin {если область еще не покрашена..}
Trace[m]:=false; {отмечаем пройденные области}
for i:=1 to Nn[m] do if Trace[Nei[m,i]] then Include(Used,Paint(Nei[m,i])); {опрашиваем цвета соседей}
i:=1;
while i in Used do Inc(i); {выбираем первый цвет из свободных}
if i>MaxCol then MaxCol:=i; {запоминаем максимальный цвет (несущественно)}
Col[m]:=i; {заполняем массив цветов областей}
Paint:=i;
Trace[m]:=true {необязательно}
end
else Paint:=Col[m] {если область уже покращена, просто возвращаем ее цвет}
end;

begin
for i:=0 to 255 do Exclude(Empty,i);
for i:=1 to Nx do begin
Col[i]:=0;
Trace[i]:=true
end;
{формат данных:}
{число строк равно чилу областей}
{первое число в строке - количество соседей области}
{затем перечисляются соседи}
{пустых строк не должно быть ни внутри, ни в конце}
Assign(f,'reg_nei.dat');
Reset(f);
N:=0;
while not EoF(f) do begin
Inc(N);
Read(f,Nn[N]);
for i:=1 to Nn[N] do Read(f,Nei[N,i]);
ReadLn(f)
end;
Close(f);

Paint(1); {красим область 1}
WriteLn('MaxCol = ',MaxCol);
for i:=1 to N do Write(' ',Col[i]);
WriteLn;
ReadLn;
end.


А вот пример файла с областями, reg_nei.dat
Код
5 2 3 4 5 6
3 1 3 6
3 1 2 4
3 1 3 5
3 1 4 6
3 1 5 2

Это расположение представляет собой пятилепестковую ромашку smile.gif. На нем (и на более простых) я проверял прогу. Вроде, не врет..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
-StrangerFX-   Теория графов.   29.04.2006 21:08
volvo   Ну, это смотря какими средствами тебе можно пользо…   29.04.2006 22:22
Гость   Ну, это смотря какими средствами тебе можно польз…   30.04.2006 1:29
volvo   Нет, до 10-го мая я ничего серьезного сделать не у…   30.04.2006 1:50
Гость   Нет, до 10-го мая я ничего серьезного сделать не …   30.04.2006 20:22
Гость   Да кстати 10 мая промежуточная сдача, основная буд…   30.04.2006 21:06
lapp   Гость, ты много всего перечислил, и не совсем поня…   1.05.2006 19:02
strangerfx   Попробовал сделать основную программу для раскраск…   1.05.2006 21:55
volvo   Во-первых, что значит "не работает"? Выл…   1.05.2006 22:03
strangerfx   {$D+} uses crt; type gh=array[1..20] of str…   1.05.2006 22:24
lapp   Теперь все работает :) . Осталось только все в гр…   2.05.2006 7:10
strangerfx   Немного странная манера: [b]попросить о помощи, а…   7.05.2006 23:18
lapp   > 1. За помощь спасибо(кстати я ее всегда замеч…   8.05.2006 16:46
strangerfx   > 1. За помощь спасибо[b](кстати я ее всегда з…   8.05.2006 20:29


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

 





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