107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
||||||
1 | ||||||
Random в цикле24.04.2013, 13:14. Показов 1632. Ответов 16
Метки нет (Все метки)
Здравствуйте, форумчане.
Я столкнулся с такой проблемой, когда написал программу для генерации судоку. Программа генерирует массив 9х9 по правилам судоку. Цифры ставятся случайно и проверяеются повторы в линиях и квадратах 3х3. Если цифра уже есть, то генерируется новое значение. Однако не всегда можно таким образом с первого раза подобать нужные комбинации. Я поставил цикл, который после определенного количества ходов, обнуляет массив и всё идёт заново. Тут тоже поставил ограничение, чтобы программа не зависала надолго. Я уже думал, что всё впорядке, но потом заметил, что после раза 200(приблизительно) программа в 99% выдает ошибку. После этого снова необходимо нажимать кнопку. С чем это связано? Вот та часть кода, где генерируется поле. Знаю, что код во многих местах следовало бы подправить, но пока интерисует вопрос с циклом. n - кол-во перебранных значений. ng - кол-во перезапусков процедуры.
0
|
24.04.2013, 13:14 | |
Ответы с готовыми решениями:
16
Заполнить список (компонент ListBox) каждым вторым числом, генерируемым Random в цикле (while) Random в цикле Поведение %random% в цикле Random в цикле дает одно значение |
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:12 | 2 |
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 14:14 [ТС] | 3 |
Я не хочу использовать чужой код. Знаю, что изобретаю велосипед, но уже дело принципа.
Да и вообще стало интересно почему такая ситуация возникла.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:20 | 4 |
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
||||||
24.04.2013, 14:22 [ТС] | 5 | |||||
Собственно говоря, текст ошибки.
Не может же быть что из тысячи вариантов ни один не подходит, в то время как если нажать кнопку 4-5 раз,тоесть по 299 раз пройтись раз 4-5, успешно завершается.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:26 | 6 |
Это не ошибка.
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 14:29 [ТС] | 7 |
Как это называется не имеет значения. Программа без этого ограничения зависает.
Если поставить порог на 10000, то результат тотже. Если в первые ~200 раз не сгенерирует, то будет висеть до достижения отметки в 10000 и остановится. Почему так происходит?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:31 | 8 |
Запросто может.
Добавлено через 2 минуты Зависание - это не ошибка.
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 14:34 [ТС] | 9 |
По-вашему, если это уже закономерность, а не случайные несколько раз, то это в порядке вещей?
Я не говорил, зависание - это ошибка. Я знаю, что это. Если хотя бы 1 раз массив сгенерировался раза эдак с 2000, то я поверил бы, что тут всё на волю случая.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:39 | 10 |
Ты пытаешься наитупейшим образом реализовать алгоритм наитупейшего перебора, вместо того чтобы вникнуть другой, гораздо более эффективный алгоритм, ссылка на одну из реализаций которого тебе дана.
Добавлено через 40 секунд Где у тебя вызов Randomize() ? Он вообще у тебя есть ?
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 14:44 [ТС] | 11 |
Я еще раз говорю, что не хочу использовать чужой код. Пускай мой алгоритм тупой до безобразия, меня это не смущает. Я привык всё делать не спеша и постепенно. Мне интересно самому найти у себя ошибки в алгоритме и совершенствовать свой код.
Я зашел в тупик относительно моей проблемы. Знаю, что судоку можно реализовать намного проще, но теперь уже просто интересно, почему генерация происходит именно таким образом. Добавлено через 40 секунд Randomize - 11 строка.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:50 | 12 |
Да никто не заставляет тебя его использовать !
Он для анализа алгоритма нужен, а не для тупого передирания) Не проще, а правильно.
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 14:56 [ТС] | 13 |
Вот вообще не хочу смотреть чужой код. Упрямый я)
Да меня и не это уже интерисует. Я сделал программу, которая генерирует поле. Без какой-либо сторонней помощи. Но почему же только первые 200 раз? Почему я не могу установить порог в 50000 и уйти обедать, зная, что когда вернусь, то будет хотя бы 15 готовых результатов?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 14:59 | 14 |
Раз так, то вооружаешься встроенным отладчиком и вперед искать причины своей "проблемы".
На то отладчик и существует. Добавлено через 3 минуты Ослиное упрямство. Хоть себе бы не врал - не "не хочу", а "не могу и не умею читать код".
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 16:10 [ТС] | 15 |
Mss,благодарю за потраченное время.
Буду копаться в отладчике,однако вопрос всё же остается открытым. Добавлено через 1 час 8 минут Таки разобрался. Проблема в рекурсии была.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
24.04.2013, 16:18 | 16 |
Рекурсия во многих алгоритмах "судокуподобных" генераторов - вещь вельми полезная, порой и незаменимая.
Но, разумеется, не пришитая ни в красную армию, как у тебя это сделано.
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
24.04.2013, 16:24 [ТС] | 17 |
Ну что ж, сейчас буду разбирать всё. Эту проблему решил, вылезло еще 3.
Со временем приведу и свой код в порядок.
0
|
24.04.2013, 16:24 | |
24.04.2013, 16:24 | |
Помогаю со студенческими работами здесь
17
Генерация ряда чисел используя random в цикле Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments Random, повторы при static Random(1 seed) У меня непонятки с методами Math.random() и Random() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |