2014-03-30 5 views
4

랜덤 미로가 오른쪽에있는 입구에서 왼쪽 벽면에있는 출구로 이어지는 경로를 차단할 수 있는지 확인하는 방법을 모르겠습니다. 이것은 지금까지 내가하고있는 코드이다. 모두가 간단한 미로 (입/퇴장)를 달성하기위한 힌트 또는 알고리즘을 제공 할 수 있습니까? 고맙습니다! P는/내 문제가 ... (박히) 출구 경로를 보장 할 수 없습니다 미로 생성기 S무작위 미로 생성기 C

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

#define SIZE 12 
void mazeGenerator(char [][SIZE]); 

int main(void) 
{ 
    char maze[SIZE][SIZE]; 
    srand((unsigned int)time(NULL)); 
    mazeGenerator(maze); 
    return 0; 
} 
void mazeGenerator(char a[SIZE][SIZE]) 
{ 
    size_t row,column = 0, r; 

    // initialize '#' to all positions of left-hand wall 
    for (row = 0; row < SIZE; ++row) 
    { 
     a[row][column] = '#'; 
    } 
    // initialize '#' to all positions of left-hand wall 
    for (row = 0; row < SIZE; ++row) 
    { 
     a[row][SIZE - 1] = '#'; 
    } 

    // initialize '.' to left-hand wall random positions from 1 -> 10 
    row = rand() % 11 + 1; 
    a[row][0] = '.'; 

    // initialize '.' to right-hand wall random positions from 1 -> 10 
    row = rand() % 11 + 1; 
    a[row][SIZE - 1] = '.'; 

    // intialize '#' to all positions of top maze 
    for (column = 1; column < SIZE - 1; ++column) 
    { 
     a[0][column] = '#'; 
    } 

    // intialize '#' to all positions of bottom maze 
    for (column = 1; column < SIZE - 1; ++column) 
    { 
     a[SIZE - 1][column] = '#'; 
    } 

    // print maze 
    puts(""); 
    puts("** Maze Generator by Huy Le **\n"); 
    for (row = 0; row < SIZE; ++row) 
    { 
     for (column = 0; column < SIZE; ++column) 
     { 
      printf_s("%2c",a[row][column]); 
     } 
     puts(""); 
    } 
    puts(""); 
} 
+0

먼저 입구와 출구 사이의 경로를 생성 한 다음 벽을 구축하지 않는 이유 그냥 생각은하고, 당신이 세운 길에 벽이 없을 것이라는 제약을가하겠습니까? – Inox

+0

나는 똑같은 아이디어를 가지고 있지만 직선을 만들 수 있으며 부 자연스럽게 보입니다. –

답변

2

귀하의 문제는 당신이 선택한 알고리즘은 경로가 보장하지 않는다는 것입니다 진입 점에서 출구 점까지. 본질적으로 미로를 무작위로 채우면 보장 된 경로가 생기지 않습니다 (실제로 여러 경로가 생길 수 있음).

미로 생성 알고리즘을 사용하고 싶습니다. 이것들은 솔루션으로 미로를 생성하는 잘 알려진 알고리즘 클래스입니다 (경우에 따라 정확히 하나의 솔루션). 여기에 많은 알고리즘에 대한 기사와 참고 자료가 있습니다. http://en.wikipedia.org/wiki/Maze_generation_algorithm

+0

사실, 일반적인 알고리즘은 두 개의 선택된 점 사이에 항상 하나의 경로 만 보장합니다. 다양한 접근법에 대한 http://www.astrolog.org/labyrnth/maze.htm의 "Links - Maze Creation"의 긴 목록을보십시오. – usr2564301

관련 문제