Andrew771, а дейкстра чем поможет то? алгоритм дейкстры используется для поиска минимального пути в графе.
генерить лабиринт, а потом проверять на прохождаемость? медленно будет.
лучше делать так (пишу по памяти, так что где-то могут быть неточности; лучше найти в интернете подобный алгоритм):
1) есть поле размера W*H, W и H - чётные
2) рисуем границу
3) выбираем вход и выход - для этого убираем 2 граничных стенки (координаты либо [int(rand() * (w-1)) + 1, 0] либо [0, int(rand() * (р-1)) + 1] либо [..., h-1] либо [w-1, ...])
4) выбираем какую стенку надо добавить - горизонтальную либо вертикальную. например, горизонтальную. тогда y=int(rand() * (h-1) + 1) , size = int(rand() * ((w-2)/2) + 1) * 2
5) for x = 1 to w-2 step 2
6) if не_пусто(x, y) then next i (если дошли до конца, а всё занято, то надо выбрать другой y)
7) рисовать стенку от x,y до x+size,y. если в процессе рисования наткнулись на стенку, то надо стереть кубик до стенки. типа так (# - стенка которая уже есть, + - которую рисуем):
превращается в:Код:....#.... ++++#.... ....#....
8) goto 4Код:....#.... +++.#.+++ ....#....
если держать список строк и столбцов, где ещё можно поставить стенку, то тогда в шаге 6 не надо будет выбирать новую случайную координату. вместо этого в шаге 4 y выбирается из списка (а значит там заведомо есть пустые места).
в результате получается всегда проходимый лабиринт, возможно с залами.
генерируется очень быстро.
из недостатков - более одного варианта прохождения.




[
KAY-1024, 5''FDD, 3''FDD, HDD
