Манипулиране на изображения в лабиринт, изрязване на празно пространство

лабиринт

Проблемът, който имам, е пътищата с ширина на 2 пиксела (белите части).

В горния ляв ъгъл на изображението (по-тъмната черна част) минах ръчно върху белите части, които бяха 2 пиксела по ширина/височина;

има две решения (за които се сещам).

  1. да го редактирате програмно, така че пътищата да са 1x1;
  2. да намерите начин за справяне с пътища, които са по-големи от 1x1.

всякакви предложения, алгоритъмът за решаване на лабиринт (tremaux), който внедрих, работи за пътища 1x1, но се опитвам да го адаптирам към този по-голям лабиринт.

за предпочитане търся решение, което е адаптивно към лабиринт, където ширините на пътя могат да бъдат с всякакъв размер, тъй като вече съм написал инструмент, където мога да взема изображение и да го превърна в монохромен int[][] масив за решаване на лабиринт.

Просто търся съвети/стъпки в правилната посока, тъй като не съм сигурен дали гледам на това правилно или се насочвам по правилния път (без игра на думи).

Благодаря


person Koborl    schedule 19.01.2015    source източник


Отговори (3)


Така че вашата мрежа ефективно се повтаря (1,2) = 3 пиксела, 1 стена 2 пътя. Просто премахнете всеки 3-ти ред. След това премахнете всяка 3-та колона.

person RobAu    schedule 19.01.2015

Мислете за изображението като за разделено на 3x3 блока, като горният ляв ъгъл винаги е стена, горният ред и лявата колона са незадължителните стени, а останалото е пътека, като това:

W w w
w P P
w P P

W = always wall
w = possible wall
P = always path

Трябва да конвертирате всеки от тези блокове 3x3 в блок 2x2 по следния начин:

W w
w P
person samgak    schedule 19.01.2015

Ако се опитвате да изтъните пътеките само за да направите лабиринта по-лесен за решаване, тогава не е нужно да се притеснявате. Намирането на най-краткия път през лабиринта с BFS е почти толкова бързо, колкото всеки алгоритъм за изтъняване на пътя (с изключение на изтриването на всеки N-ти ред и колона) и ще създаде пътища без никакви допълнителни обрати или завои.

person Matt Timmermans    schedule 28.09.2019