powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / задача конем шахматной доски.
24 сообщений из 74, страница 3 из 3
задача конем шахматной доски.
    #39374558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу 8х8. DFS - тормоз ясен пень. На данной конкретной постановке когда мы хотим очень
быстро получить 1-й солюшен и отвалить. Но Варнсдорф мне почему-то напомнил старый добрый
алгоритм мыши в лабиринте которая бегает касаясь левой (или правой ) стены и постоянно сворачивает
в одну сторону.

Вобщем у этого метода есть недостатки. В частности если посмотреть на блуждания лошади с
на большом поле (порядка 130 на 130) с высоты птичьего полета то можно видеть что
конь ходит подобно этой мыши которую я описал. Тоесть прижимается к своей собственной
тропинке которую уже проходил.



Я считаю это если не фейком то просто увеличением энтропии самого маршрута. А именно -
маршрут предстказуем и ограничен. Что будет после того как все "мышиные" маршруты
закончятся и начнётся хардкор, по которому ходит "честный DFS" - я не знаю.

Скорее всего правило Варнсдорфа будет реже выдавать результаты именно в силу того
что наиболее популярный мышиные уже исследованы. А реже - имеено по причине наличия
эвристики.

По сабжу тот DFS что я скопи-пастил и переделал тоже имеет недостатки. В частности
мне очень не нравится что он каждый раз начинает маршрут заново. Хотелось-бы
идти от изменений существующего. Но это уже без Random. А как-то по другому.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374603
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Хотелось-бы
идти от изменений существующего. Но это уже без Random. А как-то по другому.
Можно сворачивать в сторону где меньше натоптано (и наоборот).
Деление доски на части и обход частей уже смотрели https://pdfs.semanticscholar.org/927e/dbaa256301f500e8b3fcd52eaa6f0cc2c768.pdf
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374613
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniquemayton Хотелось-бы
идти от изменений существующего. Но это уже без Random. А как-то по другому.
Можно сворачивать в сторону где меньше натоптано (и наоборот).
Деление доски на части и обход частей уже смотрели https://pdfs.semanticscholar.org/927e/dbaa256301f500e8b3fcd52eaa6f0cc2c768.pdf
Что значит - "можно" ? Я и сам знаю что можно. Предложите ваш код.

Деление смотрел. Если мы решили задачу обхода 5х5 и при этом (!) гарантируем
что для любого блока 5x5 можем заставить коня войти и выйти в нужную дверь
(вход-выход) то задача обхода 130 на 130 уже решена за o(n).

Но мне решать такие задачи не очень-то интересно. Формально доказать
что вход-выход в 5х5 существует. Или 5х10.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374615
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Я не весь сорс опубликовал. Есть еще мелкая либа. Более полный вариант проекта здесь

https://sourceforge.net/p/chess-experiments/code/HEAD/tree/trunk/mayton/knight-tour/
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374686
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто значит - "можно" ? Я и сам знаю что можно. Предложите ваш код.

Только когда уйду в отпуск ;-) стараюсь хотя бы на выходных код не писать а в прошлые выходные работал.
так что пока спрыгиваю с темы но буду подумывать на досуге, может что и придет в голову.

Если ускорять бэкрейсинг то можно использовать просчитанные матрицы ходов к примеру для досок 5х5 (их около 2 тыс) и проверять текущую позицию через поиск подходящей матриц(ы) 5х5 (или меньшей в зависимости от позиции), здесь бы отлично подошла CAM память (проверка за один такт всех матриц 5х5). Ускорили бы бэктрейсинг примерно в 50 тыс раз (25 х 2000).
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374697
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueТолько когда уйду в отпуск ;-) стараюсь хотя бы на выходных код не писать а в прошлые выходные работал.
так что пока спрыгиваю с темы но буду подумывать на досуге, может что и придет в голову.

Да ради бога. Я никуда не тороплю.

Если ускорять бэкрейсинг то можно использовать просчитанные матрицы ходов к примеру для досок 5х5 (их около 2 тыс) и проверять текущую позицию через поиск подходящей матриц(ы) 5х5 (или меньшей в зависимости от позиции), здесь бы отлично подошла CAM память (проверка за один такт всех матриц 5х5). Ускорили бы бэктрейсинг примерно в 50 тыс раз (25 х 2000).
Чо? Какая такая CAM-память? Ассоциативная? Не понял зачем это надо. Когда у нас есть бесконечное
разнообразие hashtable/hashmap. И узкое место в - рекурсии а имеенно в движении коня по 8 направлениям
а вовсе не в маппингах.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немножко переделал параметры. Не нравятся константы вбитые в код. Особенно в части 4 threads.
Теперь так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 if (args.length==0){
            out.printf("\nRandom DFS knight-tour problem demo. Shows first M knight paths.");
            out.printf("\n\nUsage: java -jar knight-tour-X.X.jar WIDTH HEIGHT M THREADS [R1 C1]\n");
            out.printf("\n  Where:\n");
            out.printf("       WIDTH   : width of desk (number)\n");
            out.printf("       HEIGHT  : height of desk (number)\n");
            out.printf("       M       : amout of solutions wich has to be found (number)\n");
            out.printf("       THREADS : number of JVM-worker threads (number)\n");
            out.printf("       R1      : (optional) first position row (number)\n");
            out.printf("       C1      : (optional) first position column (number)\n");
        } else {
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374714
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как насчет эффективности, а утилизацию обеспечивает.
Вот так картинка выглядит с точки зрения JVisualVM при THREADS=5 (На моем ноуте - оптимально 5 threads).
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374739
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу моей идеи кластерного коня, которая впрочем обсуждалась в литературе.
Экспериментально я нашел что минимальная доска на которую можно покрыть конем
это 4х5 или 5х4.

Осталось еще доказать что всегда сущесвуют маршруты с нужной точкой входа и выхода.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374817
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПо поводу моей идеи кластерного коня, которая впрочем обсуждалась в литературе.
Экспериментально я нашел что минимальная доска на которую можно покрыть конем
это 4х5 или 5х4.

Осталось еще доказать что всегда сущесвуют маршруты с нужной точкой входа и выхода.
Это алгоритм Конрада
http://mathworld.wolfram.com/KnightGraph.html

Conrad et al. (1994) discovered another linear time algorithm and proved that it solves the Hamiltonian path problem for all n>=5. The Conrad et al. algorithm works by decomposition of the chessboard into smaller chessboards (not necessarily square) for which explicit solutions are known. This algorithm is rather complicated because it has to deal with many special cases, but has been implemented in the Wolfram Language by A. Roth. Example tours are illustrated above for n×n boards with n=5 to 8.

По поводу CAM памяти идея была в использовании при сравнении части доски с просчитанными матрицами за один такт и нахождении пересечений деревьев (маршрутов). Сразу накладывать ходы на глубину в 2-3 шага в виде штампа (без самопересечений) и обрабатывать только те которые не имеют пересечений с доской (листьев будет не так много, больше 8 но и не тысячи).
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374859
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конрад пошел еще дальше чем Варнсдорф. По сути задача решается выкладыванием
мозаики из готовых шаблонов.

Но все эти алгоритмы играют на строго прямоугольных досках. Что будет если им подать
на вход доску с отверстием. Или доску неправильной формы.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374887
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКонрад пошел еще дальше чем Варнсдорф. По сути задача решается выкладыванием
мозаики из готовых шаблонов.

Но все эти алгоритмы играют на строго прямоугольных досках. Что будет если им подать
на вход доску с отверстием. Или доску неправильной формы.

Да, это очень ограниченые методики, полных решений для доски 8х8 неизвестное количество, есть только грубая оценка.
На ночь глядя склепал небольшой пример (не компилировал) для пояснения как можно использовать САМ с кешем для бэкрейсинга или рекурсивного обхода доски.

Используются заранее расчитанные варианты шагов фиксированной глубины (положим 4, получается не такое большое количество вариантов максимум 8 * 7 * 7 * 7 = 2744 и дерево с 16 уровнями вместо 63.
1. Хранятся в бинарном виде позиции для каждого возможного пути глубиной N из заданой точки на доске (64 bit, long value)
2. По бинарному пути точек хранится траектория движения.
3. Вместо последовательного сравнения можно использовать CAM память и получить за 1 такт выборку возможных путей. Для глубины в 8 шагов экономия будет существенной (6.5 млн раз) a а размер кеша терпимым (420МБ для бинарного массива и 2 3 гига для объектов, можно уменьшить).

С САМ возможно ускорение примерно на 6 порядков. Завтра вставать в 5, ушел...
Код: java
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.
package knight;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

public class PrecalculatedPaths {
    private static final Logger logger = LoggerFactory.getLogger(PrecalculatedPaths.class);

    static final int [] STEP_DELTA_X = {1, 2, 2, 1, -1, -2, -2, -1};
    static final int [] STEP_DELTA_Y = {2, 1, -1, -2, -2, -1, 1, 2};

    static final int BOARD_WIDHT = 8;
    static final int BOARD_HEIGHT = 8;
    static final int DEPTH = 4;

    // first index: position on chess board (index = x * BOARD_WIDHT + y)
    // second index: array of paths from each position (first index) in binary format
    // bit at position boardWidth * BOARD_HEIGHT - 1 (63) represents state of cell x=0, y=0 and equals 1 if cell is used and 0 otherwise;
    // bit at position boardWidth * BOARD_HEIGHT - 2 (62) represents cell x=1, y=0

    static final long[][] POSSIBLE_STEP_POSITIONS;
    static final Map<Long, List<Position>> PATH_BY_BINARY_POS;


    static {
        logger.info("Building static paths");

        POSSIBLE_STEP_POSITIONS = new long[BOARD_HEIGHT * BOARD_WIDHT][];
        PATH_BY_BINARY_POS = new HashMap<>();

        long positionsInBinaryFormat;

        for(int x = 0; x < BOARD_WIDHT; x++ ) {
            for(int y = 0; y < BOARD_HEIGHT; y++) {

                List<List<Position>> paths = explore(x, y, DEPTH);

                int pathCount = paths.size();
                POSSIBLE_STEP_POSITIONS[x * BOARD_WIDHT + y] = new long[pathCount];

                for(int i = 0; i < pathCount; i++) {
                    //Compact to binary format
                    List<Position> path = paths.get(i);
                    positionsInBinaryFormat = toBinaryPositions(path);

                    POSSIBLE_STEP_POSITIONS[x * BOARD_WIDHT + y][i] = positionsInBinaryFormat;

                    PATH_BY_BINARY_POS.put(positionsInBinaryFormat, path);
                }
            }
        }
    }


    /**
     * Get pre-calculated paths DEPTH deep for position on the board x, y and
     * current board state (board[][] contains cells states: 1 when cell is used and 0 when it is free)
     *
     * @param xPos x position on the board
     * @param yPos y position on the board
     * @param board chess board cells state (0 is free, 1 is used)
     * @return
     */
    public List<List<Position>> getPrecalculatedPaths(int xPos, int yPos, int[][] board) {
        List<List<Position>> validPaths = null;

        long boardState = 0L;

        //Create board state in binary format (or use binary format in input parameters)
        for(int x = 0; x < board.length; x++) {
            for(int y = 0; y < board[x].length; y++) {
                if(board[x][y] == 1) {
                    boardState = boardState & (1 << boardPositionToBinaryShift(x, y));
                }
            }
        }

        int flatIndex = boardPositionToBinaryShift(xPos, yPos);

        long[] paths = POSSIBLE_STEP_POSITIONS[flatIndex];

        //CAM can be used here to skip loop
        for(int i = 0; i < paths.length; i++) {
             if((paths[i] & boardState) == 0L) {
                 //If no intersections found, add path as valid
                 if(validPaths == null) {
                     validPaths = new ArrayList<>();
                 }

                 validPaths.add(PATH_BY_BINARY_POS.get(paths[i]));
             }
         }


        return validPaths;
    }

    private static long toBinaryPositions(List<Position> path) {
        long binaryPositions = 0L;

        for(Position position : path) {
            binaryPositions = binaryPositions & (1 << boardPositionToBinaryShift(position.x, position.y));
        }

        return binaryPositions;
    }

    private static int boardPositionToBinaryShift(int x, int y) {
        return x * BOARD_WIDHT + y;
    }

    private static List<List<Position>> explore(int x, int y, int maxSteps) {

        List<Position> startPath =  new ArrayList<>();
        startPath.add(new Position(x, y));

        List<List<Position>> possiblePaths =  new ArrayList<>();
        possiblePaths.add(startPath);

        for(int i = 0; i < maxSteps; i++) {
            possiblePaths = exploreLevel(possiblePaths);
        }

        return possiblePaths;
    }

    private static List<List<Position>> exploreLevel(List<List<Position>> parentPaths) {
        List<List<Position>> levelPaths =  new ArrayList<>();

        for(List<Position> parentPath : parentPaths) {
            List<List<Position>> childrenPaths =  new ArrayList<>();
            Position parentPos = parentPath.get(parentPath.size() - 1);
            HashSet<Position> usedPositions = new HashSet<>(parentPath);

            for (int i = 0; i < 8; i++) {
                Position candidate = new Position(parentPos.x + STEP_DELTA_X[i], parentPos.y + STEP_DELTA_Y[i]);

                if (usedPositions.contains(candidate) || (candidate.x < 0 || candidate.x > 7) || (candidate.y < 0 || candidate.y > 7)) {
                    continue;
                }

                List<Position> levelPath = new ArrayList<>();
                Collections.copy(levelPath, parentPath);

                levelPath.add(candidate);

                childrenPaths.add(levelPath);
            }

            //If nothing found, return input
            if (childrenPaths.isEmpty()) {
                childrenPaths.add(parentPath);
            }

            levelPaths.addAll(childrenPaths);
        }

        return levelPaths;
    }


}
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39374944
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique, ничо непонятно. Где entry-point? Как это использовать?

Хотя-б модульный тест был-бы.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39375888
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonuid unique, ничо непонятно. Где entry-point? Как это использовать?

Хотя-б модульный тест был-бы.
Пардон, это всего лишь иллюстрация использования САМ и кеша заранее рассчитанных ходов из любой позиции на доске.
Даже без ассоциативной памяти с кешем бэкрейс будет работать шустрее. Написано грубовато, на ночь глядя, без проверок.

Entry point:
public List<List<Position>> getPrecalculatedPaths(int xPos, int yPos, int[][] board)

Метод thread safe, доступ только на чтение из потоков.

даете массив позиций на доске (0 ячейка свободна, 1 занята) и получаете коллекцию ходов коня на 4 шага вперед не конфликтующую с позициями на доске.Можете использовать тот же бэктрейсинг но не с 64 уровнями а с 16.

В бэктрейс несколько потоков молотят один и тот же цикл проверки ходов коня для каждой ячейки на доске, одинаковая работа делается несколько раз, сравнение тоже в цикле идет. В кеше хранятся позиции коня для ходов на глубину в 4 шага (можно менять глубину) и сравнение делается по бинарным полям в long массива позиций фигур на доске в биты в long (как в массиве). Так как упаковка позиций в 64 бита переменную то макс площадь доски не более 64 позиций.

А вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе).
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39375894
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueА вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе).

Облизываюсь на продукцию вот этой конторы давненько уже (лет 10) https://www.opalkelly.com/products/
Может все таки возьму эту плату или подобную в хозяйство https://www.opalkelly.com/products/xem7360/
стряхну пыль с книжек по Verilog и VHDL (лежат на полочке уже давно), скачаю новые версии IDE и тогда можно будет поизвращаться с шахматными задачками и специализированными ускорителями. Типовая бизнес Java действует на меня отупляюще, перестал думал, скоро буду мычать как Маугли ;-)
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378533
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докину дровишек.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueПардон, это всего лишь иллюстрация использования САМ и кеша заранее рассчитанных ходов из любой позиции на доске.
Даже без ассоциативной памяти с кешем бэкрейс будет работать шустрее. Написано грубовато, на ночь глядя, без проверок.

Entry point:
public List<List<Position>> getPrecalculatedPaths(int xPos, int yPos, int[][] board)

Метод thread safe, доступ только на чтение из потоков.

даете массив позиций на доске (0 ячейка свободна, 1 занята) и получаете коллекцию ходов коня на 4 шага вперед не конфликтующую с позициями на доске.Можете использовать тот же бэктрейсинг но не с 64 уровнями а с 16.

В бэктрейс несколько потоков молотят один и тот же цикл проверки ходов коня для каждой ячейки на доске, одинаковая работа делается несколько раз, сравнение тоже в цикле идет. В кеше хранятся позиции коня для ходов на глубину в 4 шага (можно менять глубину) и сравнение делается по бинарным полям в long массива позиций фигур на доске в биты в long (как в массиве). Так как упаковка позиций в 64 бита переменную то макс площадь доски не более 64 позиций.

А вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе).
Я тут пожалуй хочу услышать каменты коллег. Я мало чего понял.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378672
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ тут пожалуй хочу услышать каменты коллег. Я мало чего понял.
Мэйтон, с Новым Годом! У меня все болеют вокруг, один я еще пока держусь (как в фильмах про зомби), открыл бутылочку Камю, хряпнул соточку неторопясь закусывая вкусной конфеткой... хороший коньячок в ЦУМе продают, не ожидал. Хорошо москвичи живут, в провинции такой коньяк найти трудно.
В общем о чем я - с наилучшими пожеланиями в Новом 2017 году, чтоб были идеи в голове, интересная работа, здоровья хватало и семья была в порядке (жена довольна)! Чтоб наши потребности не опережали наши возможности и было счастье и лепота на душе!

PS по поводу промера кода, ну что там непонятного? наспех написанный примерчик, набросок. Вместо проверки на один шаг делается проверку сразу на 4 шага вперед (количество шагов произвольное число, зависит от доступного размера кеша), у САМ памяти преимущество в том что поиск в несортированном массиве (любого размера) делается за 1 такт. Причем поиск может идти по маске а не полному совпадению.
PSS Когда эта память станет массовой она перевернет устоявшиеся подходы в решении задач и многие неэффективные раньше алгоритмы получат второе дыхание.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378959
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДокину дровишек.

это ваша реализация отработала ?
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378961
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Та которую я опубликовал по ссылке выше.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378964
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
друзья , напоминаю вам , что вопрос был относительно потоков. Доска 8x8 . поэтому никаких прямоугольных досок, никаких "дырок" в доске.
старт осуществляем из клетки указанный пользователем.
Рассуждения по поводу Варнсдорфа не интересны.

Интересовал собственно вопрос возможно ли реализовать вывод хотя бы одного решения при помощи 4-х потоков или более.
Да / Нет.

Спасибо.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378967
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39378984
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа.
нет возможности пока скачать и посмотреть
а с любой точки искалос? скажем с точки 0:1 , или 0:2
у меня с них висло все
...
Рейтинг: 0 / 0
задача конем шахматной доски.
    #39379027
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для DFS - нормально работает для размеров до 7х7. Правда нет в моей реализации команды stop
после первого найденного и пока 4 потока не отработают - процесс продолжает активность.
Впрочем такой задачи я себе не ставил.

Для DFS я пока не дождался решения 8х8. Мне жалко мой ноутбук Core-i3. Да батарея выгорает
быстро когда он под нагрузкой.

Но думаю завтра-послезавтра я доделаю Варнсдорфа и тоже добавлю его в список алгоритмов как
плагин. И если у меня хватит сил - UI c графиками и статистикой.

Есть еще несколько мыслей. Надо попробовать доску-тор. И доску-лабиринт где будут стоять
другие фигуры. Чтоб не было явного преимущества у "беготни вдоль забора".
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / задача конем шахматной доски.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]