![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
народ!! подскажите как написать рабочий алгоритм генерации таблицы игр для n команд....
сколько пытался - не получается.. всё время получается зацикливание.... |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
Попытки кода в студию.
|
|||
|
||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
я немного неправильно сказал.... происходит не зацикливание, а в определённый момент просто оказывается не из чего выбирать.. когда посмотрите на результаты и на сам код то поймёте про что я... но вот КАК это обойти??? я уже все варианты перебрал...
я постарался максимально понятно прокомментировать, чтобы было удобно читать, также если код запустить в браузере, то сразу будут видны результаты... заранее спасибо, жду вашего мнения
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
понял... приношу извинения
дело в том что сначала-то я в С++ пытался, а потом незаметно для себя перешёл на javascript)) обещаю исправиться |
|||
|
||||
| TryLight |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 26.8.2007 Репутация: нет Всего: 1 |
На самом деле то, что ты пытаешься сделать называется "магический квадрат", т.е. матрица размером NxN, в которой элементы по строке и по столбцу не повторяются.
Твой алгоритм такой: идем по строкам j от 1 до N идем по столбцам i от 1 до N a[i][j] = Arr[random], где Arr - массив тех элементов, которых еще нет в ни столбце(!), ни в строке(!) след. i, j И реально получаются накладки, вида ........|...2...|........ ...1...|.Non.|...3...|...4...|...5...|...6... Решение: По-видимому, развертку надо делать не построчную, а диагональную, т.е. [1][1] [1][2], [2][1] [1][3], [2][2], [3][1] ... этот пример выводит в ячейки значения mas.length
|
|||
|
||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
чтото это не совсем то.. вот что у меня получилось...
6 5 4 3 2 1 5 5 4 3 2 1 4 4 5 3 2 1 3 3 3 4 3 2 2 2 2 4 3 2 1 1 2 3 3 3 странно, может я чегото недопонял, и мне дали только идею, но... да и где же тут случайность? хотя признаюсь в код я ещё не сильно вчитывался, щас этим и займусь... но всё равно спасибо за уделённое время |
|||
|
||||
| TryLight |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 26.8.2007 Репутация: нет Всего: 1 |
krinart,
как было сказано, это пример, который в ячейках таблицы выводит колличество возможных значений для данной ячейки. да, я дал идею, к которой надо добавить random. Это сообщение отредактировал(а) TryLight - 11.4.2008, 21:44 |
|||
|
||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
дело в том что мне ведь нужна матрица не N*N, а (N-1)*N...
я сделал дополнительную проверку в ваших функциях, чтобы индексы не доходили до последней строки,
однако опять появляется ситуация, когда "не из чего выбирать" в комментарии вы написали что клетки, в которых число совпадает с номером столбца(лишние клетки) надо будет заштриховать, но мне то нужно чтобы они были в одной строке(то есть в одном "туре")... вот тут я снова в тупике... был бы очень признателен за ещё одну подсказку)) |
|||
|
||||
| TryLight |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 26.8.2007 Репутация: нет Всего: 1 |
тогда так
ну и там кое-что доделать. и давай на "ты", я не такой уж крутой программист |
|||
|
||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
итак, вот что у меня в результате получилось... комменты поставил там где сделал изменения от твоего первоначального вида
всётаки чтото там не работает... я немного модифицировал свой алгоритм.. можно сказать, сделал его бесконечным)) теперь он будет работать до тех пор , пока всётаки на сможет сформировать эту таблицу... конечно, не тупо его зациклил, а сделал вот что(даже два варианта): 1. если встречается ситуация, когда не из чего выбирать, то у нас есть 10 попыток заново составить эту строку... если же и это не помогает, тогда заново начинаем составлять всю таблицу 2. если не удаётся за 10 попыток сотавить строку, тогда пытаемся заново составить предыдущую, и так до бесконечности к сожалению алгоритм получился очень сложным.. за 10 часов не смог составить таблицу для 100 команд, но вот в случаях до 20 команд работает исправно, только изредка подтормаживает теперь вот думаю, можно ли его использовать на практике... |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
А если предварительно все команды перетасовать случайным образом, а потом расставить вот в таком порядке? Подойдет? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| TryLight |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 26.8.2007 Репутация: нет Всего: 1 |
Виноват. Надо мне было сразу дорешать все до конца, а то получилось, подбросил идею, а она не лучше твоей. Кстати, там в проходе по второму углу ошибка была, цикл проходил его по колонкам, а не диагоналям. Когда я исправил, стало только хуже. В общем, как я ни пробовал - и по числам, т.е. взять 1, разбрасать ее по таблице, потом 2 и т.д., всегда получается одно и то же: в какой-то момент оказывается, что свободные клетки ряда блокируются числами в столбцах. Возникает ситуация, о которой ты говорил "не из чего выбирать". Задачу можно решить, если принципиально изменить концепцию: мы берем укомплектованную таблицу, а потом тасуем столбцы и строки. Возникает только вопрос: откуда как сформировать такую таблицу произвольного размера. Первое, что приходит в голову - составить ее из рядов вида 1,2,3,... Т.е. примерно так 1 - {2, 3, 4, 5, 6, 1} 2 - {3, 4, 5, 6, 1, 2} ... 6 - {1, 2, 3, 4, 5, 6} (на выброс) Собственно, это я и сделал. И перетасовал строки. Столбцы менять местами мы не можем, т.к. появятся тождественные чиста в столбцах. Но то, что получилось, мне не очень нравиться; видно, что ряды составлены из восходящей последовательности чисел. И избежать этого, по-моему, не удасться.
|
||||
|
|||||
| krinart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
вся проблема в том что нужно не просто расставить числа так, чтобы они не повторялись в столбцах и строках, а ну жно ещё сделать так, чтобы в каждой строке если в 1 столбце стоит 4, то в четвёртом столбце соответственно должна стоять единица, и так для каждой команды, так как команды должны попарно играть в туре... и поэтому такой подход тоже не подходит, так как числа не могут идти подряд по возрастанию или убыванию..... нужно чтото совершенно другое, но вот что именно я придумать не могу, так как теперь задача получается больше математическая, и если будет общая идея как это сделать, запрогроммировать её будет несложно.... неужели здесь нету людей, имеющих познания в комбинаторике, по моему это именно из этой области.... |
|||
|
||||
| TryLight |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 26.8.2007 Репутация: нет Всего: 1 |
Опять новое ограничения. Я решаю одну задачу, на деле оказывается другая.
Вимимо, тот путь, который был тобою предложен изначально мы исчерпали и видим, что решения таким способом не получить. Причины названы. Давай мы эту тему закроем, а ты математически-корректно сформулируешь условие задачи и предложишь ее, наверно даже и не на этом форуме. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |