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

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

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

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


Гость






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

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

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

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

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

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

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

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


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

 



- Текстовая версия 18.07.2025 9:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"