Форум программистов, компьютерный форум CyberForum.ru

Лабиринт - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
04.07.2012, 20:37     Лабиринт #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <fstream>
#include <conio.h>
#include <time.h>
#include <cmath>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,".1251");
    srand(time(0));
 
    //создание массива
    int N;
    cout << "Введите размер матрицы(N*N)(N<=50)"<<endl;
    cin >> N;
    while((N<1) || (N>50))
    {
        cout << " Размер задан неверно, введите заново " << endl;
        cin >> N;
    }
    int **mas,elem;                 
    mas = new int *[N];         
    for (int i=0; i<N; i++)     
        mas[i] = new int [N]; 
    int choice;
    cout << " Для заполнения лабиринта случайно введите 1 " << endl;
    cout << " Для заполнения лабиринта вручную, введите 2" << endl;
    cin >> choice;
    switch (choice)
    {
    case 1:
        {srand(time(0));
 
        cout<<" Лабиринт "<<endl;
        for (int i=0; i<N; i++)
            for (int j=0;j<N;j++)
                mas[i][j] = rand()%2;}
        break;
 
    case 2:
        {
            for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {cout<< "Введите элемент[ "<<i+1<<" ][ "<<j+1<<" ] (0-проход,1-стена)"<<endl;
            cin>>elem;
            while((elem!=0)&&(elem!=1))
            {cout<<" Неверный символ. Введите 0 для прохода, 1 для стены"<<endl;
            cin>>elem;}
            mas[i][j]=elem;}}break;
    default: cout<<" Неправильный ввод.Программа будет завершена"<<endl;
        return 0;
    }   
 
    for (int i=0;i<N;i++)
    {
        for(int k=0;k<N;k++)
            printf( "%3d",mas[i][k]);           
        cout<<endl;
    }
    _getch();
    return 0;
}
есть такой код, он создает лабиринт. если он создается рандомно, то получается, что по нему вообще нет прохода.
помогите исправить, чтобы проход точно был.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 20:37     Лабиринт
Посмотрите здесь:

Лабиринт C++
C++ Лабиринт
Лабиринт C++
C++ лабиринт
Лабиринт с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.07.2012, 20:59     Лабиринт #2
да тут функцию, как мне кажеться, проще написать. Которая будет прокладывай рандомный путь, уже после заполнения матрицы. Скажем вход в [0][0] выход [20][20]
C++
1
2
3
4
5
6
7
8
int napravlenie,dlina;
mas[0][0]=0;
napravlenie=rand()%2;
dlina=rand()%4;
if(napravlenie==1)
//тут переписываем столбец на dlina вниз нолями
else
//переписываем строку на dlina нолями
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
05.07.2012, 10:09  [ТС]     Лабиринт #3
У меня задание создать трехмерный алгоритм, этот трехмерный?
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
05.07.2012, 11:02     Лабиринт #4
Хм, объясните пожалуйста что такое лабиринт?)
В моем представлении лабиринт - это

Название: render-taj-maze.jpg
Просмотров: 379

Размер: 51.3 Кб

а у вас какая-то матрица из нулей и единичек...
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
05.07.2012, 11:19  [ТС]     Лабиринт #5
по заданию это должно быть на консоли.
трехмерный лабиринт с заданными начальной и конечной точками - считывается из файла, имя которого задается в качестве параметра при запуске программы;
лабиринт должен состоять из клеток, через которые может проходить путь и клеток-стен, через которые путь прокладываться не может.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
05.07.2012, 12:44     Лабиринт #6
Цитата Сообщение от yleart Посмотреть сообщение
Хм, объясните пожалуйста что такое лабиринт?)
В моем представлении лабиринт - это http://docs.gimp.org/2.6/ru/images/f...r-taj-maze.jpg,
а у вас какая-то матрица из нулей и единичек...
ну почему же. Если записать как

C++
1
2
3
4
5
6
7
8
9
10
11
  for (int i=0;i<N;i++)
    {
        for(int k=0;k<N;k++)
        {
            if(mas[i][k]==0)
                cout<<" ";
            else
                cout<<"@";
        }
        cout<<endl;
    }
то вполне себе можно нафантазировать лабиринт) правда никак не трехмерный
murderer
3175 / 1398 / 69
Регистрация: 06.10.2010
Сообщений: 3,017
05.07.2012, 13:48     Лабиринт #7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <conio.h>
 
#define width  79
#define height 25
 
char  wall[2]={219,0};
unsigned char  screen[width*height];
unsigned short front[width*height];
unsigned char  sd[96]={0,1,2,3,
                       0,1,3,2,
                       0,2,1,3,
                       0,2,3,1,
                       0,3,1,2,
                       0,3,2,1,
                       1,0,2,3,
                       1,0,3,2,
                       1,2,0,3,
                       1,2,3,0,
                       1,3,0,2,
                       1,3,2,0,
                       2,0,1,3,
                       2,0,3,1,
                       2,1,0,3,
                       2,1,3,0,
                       2,3,0,1,
                       2,3,1,0,
                       3,0,1,2,
                       3,0,2,1,
                       3,1,0,2,
                       3,1,2,0,
                       3,2,0,1,
                       3,2,1,0};
short way[4]={-width,1,width,-1};
 
int main()
{
    int i,j,k,l,m,n;
    //Создаём начальный шаблон лабиринта
    for(i=0;i<width*height;i++)
      screen[i]=1;
    j=height-2;
    do{
      i=width;
      k=j*width+1;
      do{
        screen[k]=255;
        k+=2;
        i-=2;
      }while(i>1);
      j-=2;
    }while(j>0);
    //Генерируем лабиринт
    front[0]        =(j+2)*width+1;
    screen[front[0]]=0;
    l=1;
    do{
      m=rand()%l;
      i=(rand()%24) << 2;
      k=i+3;
      do{
        n=way[sd[i]];
        j=front[m]+n;
        n=n+j;
        if(screen[n]==255)
        {
          screen[n]=0;
          screen[j]=0;
          front[l] =n;
          l++;
          goto _break;
        };
        i++;
      }while(i<=k);
      l--;
      front[m]=front[l];
      _break:;
    }while(l);
 
    k=0;
    for(j=height;j>0;j--)
    {
      for(i=width;i>0;i--)
        printf(screen[k++]?&wall[0]:" ");
      printf("\n");
    }
    getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 16:34     Лабиринт
Еще ссылки по теме:

Лабиринт с телепортами на C++ C++
C++ Игра Лабиринт
Лабиринт C++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
05.07.2012, 16:34  [ТС]     Лабиринт #8
murderer, спасибо, я еще не могу разобраться с файловым выводом, нужно чтобы лабиринт и точки входа и выхода считывались из файла.
Yandex
Объявления
05.07.2012, 16:34     Лабиринт
Ответ Создать тему
Опции темы

Текущее время: 13:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru