Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.02.2017
Сообщений: 3

подскажите с чего начать

28.05.2017, 15:16. Показов 1251. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
8. Имеется шахматная доска. Некоторые поля не ней заняты белыми фигурами и пешками. Каждая занятое поле определяется числом -1. Необходимо определить:
а) минимальное количество ходов белого коня, которое требуется для его перемещения с поля (Х1,У1) на поле (Х2,У2),


надо ли прописывать каждый ход коня. и как это сделать ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2017, 15:16
Ответы с готовыми решениями:

С чего начать
Возможно (даже точно) я кинул вопрос не в ту тему, но все же. Буквально на днях изучил структуру написания HTML, узнал что к чему и как....

Многопоточность, с чего начать?
Добрый день. Суть такова, что с многопоточностью вообще до этого не сталкивался(было процедурное програмирование, ООП программирование но...

С чего начать Spring?
Хочу освоить Spring фреймворк, в нем ни бум-бум, толком даже не понимаю что это да как. Подскажите литературу для чайников или вообще с...

2
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
28.05.2017, 18:00
Лучший ответ Сообщение было отмечено Dmitry999 как решение

Решение

С этими конями всегда так.
Кликните здесь для просмотра всего текста

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
public class Point {
    final  int[] O_X = new int[]{ -2, -2, -1, -1,  1, 1,  2, 2};
    final  int[] O_Y = new int[]{ -1, 1,  -2,  2, -2, 2, -1, 1};
    int x;
    int y;
 
    boolean equals(Point p) {
        return (x == p.x && y == p.y);
    }
 
    public Point( int x, int y) {
        this.x = x;
        this.y = y;
    }
 
    boolean checkPoint(int index) {
        int x = this.x + O_X[index];
        int y = this.y + O_Y[index];
 
        if (x >= 0 && x < 8 && y>=0 && y < 8) {
            return true;
        }
        return false;
    }
 
    boolean setPoint(int index) {  // все равно с проверкой сажаем
        int x = this.x + O_X[index];
        int y = this.y + O_Y[index];
        if (x >= 0 && x < 8 && y>=0 && y < 8) {
            this.x = x;
            this.y = y;
            return true;
        }
        return false;
    }
 
 
}
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
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
 
 
 
public class Field {
    int[][] field = new int[8][8];
    ArrayList<Point> getPoints; // просто поле
    ArrayList<Point> setPoints; // просто поле
    static int indexStep; // прохода
    Point pStart;
    Point pEnd;
 
    public Field() {      // новое поле
        getPoints = new ArrayList<Point>(); // пустой массив
        setPoints = new ArrayList<Point>(); //
        Field.indexStep = 0;
    }
 
    void initField() {
        Field.indexStep = 0;
        for (int i = 0; i < field.length; i++) {
            Arrays.fill(field[i], 0);
        }
        pStart = getPointRnd();
        pEnd = pStart;
        while (pStart == pEnd) {
            pEnd = getPointRnd();
        }
        placeOnField(pStart);
        placeOnField(pEnd);
 
        getPoints.clear();
        setPoints.clear();
        setPoints.add(pStart);  // размер и будет индексом для прогона
 
    }
 
 
    Point getPointRnd() {
        Random rnd = new Random();
        return (new Point(rnd.nextInt(8),rnd.nextInt(8)));
    }
 
    Point getpStart() {
        return pStart;
    }
    Point getpEnd() {
        return pEnd;
    }
 
    void placeOnField(Point p) {
        if (p.x >= 0 && p.x < 8 && p.y >= 0 && p.y < 8) {
            field[p.x][p.y] = 1;
        }
    }
 
    boolean checkField(Point p) {
        field[p.x][p.y] = 1;
        return (pEnd.equals(p)); // проверяем что точка найдена
    }
 
    boolean setAround(Point pIn) {
        for (int i = 0; i < 8; i++) {
            if (pIn.checkPoint(i)) {                            // проверяем есть ли такая точка
                Point p = new Point(pIn.x, pIn.y);              // клонируем когда уверены что ок
                p.setPoint(i);                                  // задаем координаты с повторной проверкой
                setPoints.add(p);                               // добавили точку на данном шаге
                placeOnField(p);                                // поместили на поле
                if (checkField(p)) {
                    field[p.x][p.y] = 5;                        // маркируем конечную точку
                    return true;   // достигли конечной точки
                }
            }
        }
        return false;
    }
 
    boolean  setRPoints() {
        indexStep++;                                    // перешли на новый шаг
        getPoints.clear();                              // очищаем исходный массив
        getPoints.addAll(setPoints);                    // клонируем массив
        setPoints.clear();                              // очищаем выходной массив
        for (int i = 0; i < getPoints.size(); i++) {    // прогоняем весь массив get
            if (setAround(getPoints.get(i))) {          // добавляем в 8 раз больше элементов
                return true;
            }
        }
        return false;
    }
 
 
 
    void showField() {
        System.out.println("-----------------------------");
        System.out.println("    0  1  2  3  4  5  6  7");
        for (int i = 0; i < field.length; i++) {
            int[] ints = field[i];
            System.out.print(i+" [");
            for (int j = 0; j < ints.length; j++) {
                int anInt = ints[j];
                if(pStart.equals(new Point(i,j))) {
                    System.out.print(" S ");
                } else if (pEnd.equals(new Point(i, j))) {
                    if (field[i][j] == 5) {
                        System.out.print(" X "); // решение найдено
                    }else {
                        System.out.print(" E ");
                    }
                } else {
                    System.out.print(" " + ((anInt == 0) ? "." : "*") + " ");
                }
            }
            System.out.println(" ]");
        }
        System.out.println("-----------------------------");
        System.out.printf("PStart: %d,%d pEnd: %d,%d Step:%d \n",
                              pStart.x,pStart.y,pEnd.x,pEnd.y,indexStep );
        System.out.println("getPoints: "+getPoints.size()+" setPoints: "+setPoints.size());
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main {
    public static void main(String[] args) {
        Field field = new Field();
        int res = 0;
         boolean finish = false;
         field.initField();  // создать поле и начальная S и конечная E позиции выбираются случайно
         field.showField();  // показать поле
 
         while (!finish) {
             finish = field.setRPoints();  // крутится до завершения
//            field.showField();
         }
         res = Field.indexStep;  // найдено число шагов
         System.out.println("result: "+res);
         field.showField();
         System.out.println("Минимальный шаг: "+field.indexStep);
    }
}

Смотрите код, автоматом задаются начальная и конечная позиции,
затем программа перемалывает все возможные ходы,
и находит минимальный путь.
0
0 / 0 / 0
Регистрация: 27.02.2017
Сообщений: 3
28.05.2017, 18:21  [ТС]
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2017, 18:21
Помогаю со студенческими работами здесь

С чего начать изучать Java SE
Добрый вечер,народ подскажите с чего начать изучать Java SE,сам язык не знаю,сказали что начать изучать надо именно с J2SE.Посоветуйте...

Посоветуйте с чего начать новичку
Добрый день, уважаемые Java программисты :senor: Посоветуйте с чего начать новичку изучать Java. Есть опыт программирования на VBA...

С чего начать изучение Java
Посоветуйте с чего лучше начать изучать язык программирования java? Подскажите какую нибудь литературу для начала! И где можно скачать саму...

С чего начать изучение Java? Литература, видеоуроки...
подскажите плиз с чего начать изучение java языка..с каких книг, видео уроков? иле какие др вопросы следует предварительно изучить

Unit test-ы - с чего начать и как их писать
собственно вопрос - как писать юниттесты?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru