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

Генерация 6 свободного лабиринта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу вычисления степени числа А с натуральным показателем N . (Записать варианты программы с 3 видами циклов: for, while, do…while) http://www.cyberforum.ru/cpp-beginners/thread1117581.html
Составить программу вычисления степени числа А с натуральным показателем N . (Записать варианты программы с 3 видами циклов: for, while, do…while) Просто нужна помошь, начал делать(с циклом for), но не уверен праильно-ли... проверьте, пожалуйста, правильно ? /// #include<stdio.h> #include<math.h> #include<iostream>
C++ "Забавная игра" Есть задача: Забавная игра (Время: 1 сек. Память: 16 Мб Сложность: 30%) Легендарный учитель математики Юрий Петрович придумал забавную игру с числами. А именно, взяв произвольное целое число, он переводит его в двоичную систему счисления, получая некоторую последовательность из нулей и единиц, начинающуюся с единицы. (Например, десятичное число 1910 = 1*24+0*23+0*22+1*21+1*20 в двоичной... http://www.cyberforum.ru/cpp-beginners/thread1117548.html
C++ Аппроксимация.Линейная интерполяция
Здравствуйте!Помогите,пожалуйста,найти ошибку в коде.Высчитывает неверные корни. #include<iostream> #include<math.h> using namespace std; int main (void) { int i,j,m=12; double x_t,x_m={0},y={0},y_m={0},x={0},polinom,pogr,n=2,a_v={0},b_v={0},a=-4,b=2; for(i=1;i<m;i++) {
C++ Клиент-серверное приложение
Не могу найти примеры клиент серверного приложения с использованием пула потоков с использование winapi функции,помогите найти книгу или статью
C++ Поиск подстроки http://www.cyberforum.ru/cpp-beginners/thread1117523.html
Функция char* findPstr(char* str1, char* str2), получив строку str1, ищет в ней первую подстроку, равную строке str2. Если такая подстрока найдена, то функция через возвращаемое значение возвращает адрес найденной подстроки. Если подстрока не найдена, то функция возвращает 0. char* findPstr(char* str1, char* str2) { int s=0; for(int i = 0;str1!=0; i++) { if (str1==str2) { ...
C++ Как нарисовать график функции? Привет всем. Учусь программированию всего пол года. И тут мне дают задание - написать программу для рисования графика функции y=x. Скажите, чтобы написать программу, нужны графические библиотеки? Я не хочу, чтоб вы писали программу за меня. Просто скажите, какую лучше библиотеку установить? И можно ли как-то обойтись без них? И последний вопрос. Библиотеку DirectX будет трудно освоить новичку?... подробнее

Показать сообщение отдельно
Wandal
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 11

Генерация 6 свободного лабиринта - C++

12.03.2014, 20:25. Просмотров 473. Ответов 2
Метки (Все метки)

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int ShowMaze(int size, int**maze)
{   
    for (int i = 0; i <= size; i++)
    {
        for (int z = 0; z <= size; z++)
                    {
            printf_s("%d", maze[z][i]);
        }
        printf_s("\n");
    }
    return NULL;
}
int Chek(int *XYmas, int **maze, int *XY1mas,int size)
{
    if (((XYmas[0] - 1) >= 0) && ((XYmas[1] + 1) <= size))
    {
        if (maze[XYmas[0] - 1][XYmas[1] + 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0] - 1][XYmas[1] + 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0] - 1][XYmas[1] + 1] == 3))
        {
            return 1;
        }
        
    }
    else if ((XYmas[1]+1)<=size)
    {
        if (maze[XYmas[0]][XYmas[1] + 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0]][XYmas[1] + 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0]][XYmas[1] + 1] == 3))
        {
            return 1;
        }
        
    }
    else if (((XYmas[0] + 1) <= size) && ((XYmas[1] + 1)<=size))
    {
        if (maze[XYmas[0] + 1][XYmas[1] + 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0] + 1][XYmas[1] + 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0] + 1][XYmas[1] + 1] == 3))
        {
            return 1;
        }
        
    }
    else if (((XYmas[0] - 1) >= 0) && ((XYmas[1] - 1) >= 0))
    {
        if (maze[XYmas[0] - 1][XYmas[1] - 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0] - 1][XYmas[1] - 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0] - 1][XYmas[1] - 1] == 3))
        {
            return 1;
        }
        
    }
    else if ((XYmas[1] - 1)>=0)
    {
        if (maze[XYmas[0]][XYmas[1] - 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0]][XYmas[1] - 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0]][XYmas[1] - 1] == 3))
        {
            return 1;
        }
        
    }
    else if (((XYmas[0] + 1) <= size) && ((XYmas[1] - 1)>=0))
    {
        if (maze[XYmas[0] + 1][XYmas[1] - 1] == 4)
        {
            return 2;
        }
        else if ((maze[XYmas[0] + 1][XYmas[1] - 1] == 1) && (XYmas[0] != XY1mas[0]) && (XYmas[1] != XY1mas[1]) && (maze[XYmas[0] + 1][XYmas[1] - 1] == 3))
        {
            return 1;
        }
        
    }
    else
    {
        return 0;
    }
}
int *newcordgen(int size, int *XYmass)
{
    int NewX = 0;
    int NewY = 0;
    NewX = XYmass[0] - 1 + rand() % 3;
    NewY = XYmass[1] - 1 + rand() % 3;
    while  (NewY==XYmass[1])
    {
        NewX = XYmass[0] - 1 + rand() % 3;
        NewY = XYmass[1] - 1 + rand() % 3;
    }
    while (NewX<0 || NewX>size || NewY<0 || NewY>size || (NewX == XYmass[0] && NewY == XYmass[1]))
    {
        NewX = XYmass[0] - 1 + rand() % 3;
        NewY = XYmass[1] - 1 + rand() % 3;
    }
    XYmass[0] = NewX;
    XYmass[1] = NewY;
    return XYmass;
}
int WayGen(int size, int **maze, int *XYmas, int *endmass)
{
    
    int chek = 0;
    int XY1mas[2];
    XY1mas[0] = XYmas[0];
    XY1mas[1] = XYmas[1];
    newcordgen(size, XYmas);
    chek=Chek(XYmas, maze, XY1mas,size);
    if (chek == 1)
    {
        WayGen(size, maze, XY1mas, endmass);
    }
    if (chek !=2)
    {
        if ((maze[XYmas[0]][XYmas[1]] != 3) && (maze[XYmas[0]][XYmas[1]] != 4))
        {
            maze[XYmas[0]][XYmas[1]] = 1;
        }
        ShowMaze(size, maze);
        WayGen(size, maze, XYmas, endmass);
    }
    if ((maze[XYmas[0]][XYmas[1]] != 3) && (maze[XYmas[0]][XYmas[1]] != 4))
    {
        maze[XYmas[0]][XYmas[1]] = 1;
    }   
    return 0;
}
int *EndSet(int size, int *startmass, int *endmass, int **maze)
{
    int EndX = 0;
    int EndY = 0;
    if (startmass[0] == 0)
    {
        EndX = size;
        EndY = rand() % (size+1);
    }
    else if (startmass[0]==size)
    {
        EndX = 0;
        EndY = rand() % (size+1);
    }
    else
    {
        if (startmass[1] == 0)
        {
            EndX = rand() % (size+1);
            EndY = size;
        }
        if (startmass[1] == size)
        {
            EndX = rand() % (size+1);
            EndY = 0;
        }
    }
    maze[EndX][EndY] = 4;
    endmass[0] = EndX;
    endmass[1] = EndY;
    return endmass;
}
int *StartSet(int size, int **maze, int *startmas)
{
    int rHeight = 0;
    int rWidth = 0;
    rWidth = rand() % (size+1);
    if ((rWidth == 0) || (rWidth == size))
    {
        rHeight = rand() % (size+1);
    }
    else
    {
        rHeight = rand() % 2;
        if (rHeight == 1)
        {
            rHeight = size;
        }
    }
    maze[rWidth][rHeight] = 3;
    startmas[0] = rWidth;
    startmas[1] = rHeight;
    return startmas;
}
int **MazeFill0(int size, int **maze)
{
    for (int i=0; i <= size; i++)
    {
        for (int z = 0; z <= size; z++)
        {
            maze[i][z] = 0;
        }
        
    }
    return maze;
}
int **MazeGen(int size, int **maze)
{   
    int counter = 0;
    maze = (int **)calloc(size, sizeof(int*));
    for (; counter <= size; counter++)
    {
        maze[counter] = (int*)calloc(size, sizeof(int));
    }
    return maze;
}
int main()
{
    srand((unsigned)time(NULL));
    int endmass[2];
    int startmas[2];
    int **maze=0;
    int size = 2;
    maze = MazeGen(size, maze);
    MazeFill0(size, maze);
    StartSet(size, maze, startmas);
    EndSet(size, startmas, endmass, maze);
    WayGen(size, maze, startmas, endmass);
    ShowMaze(size, maze);
    return 0;
}
Такая проблема, не могу найти ошибку, рекурсия уходит в бесконечность в некоторых случаях а иногда просто не проверяет, 4 перепроверил все и относительно кординат, вроде все верно, помогите может что уже имел дело с 6 свободным лабиринтом, может что путное подскажите.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru