Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > Перевод программного кода с C++ на Java |
Автор: Reenaz 12.10.2015, 00:17 |
Есть код программы, выполняющий алгоритм Обхода коня всех клеток шахматной доски.Нужно перевести этот код на Java.Пожалуйста помогите это сделать, сам в с++ совершенно не разбирась(( вот ссылка на сам код: http://iguania.ru/article/knights-tour |
Автор: LSD 12.10.2015, 11:05 | ||
Тема перенесена. |
Автор: rudolfninja 12.10.2015, 11:50 |
Насколько я вижу, там код на java будет почти такой же. Единственное отличие, на первый взгляд, будет в организации ввода/вывода. |
Автор: leniviy 12.10.2015, 20:59 |
Насколько я помню, у швейцарцев есть такая программа-конвертер. Услуга стоит $10 за строку кода. Или можно потратить 40 минут на изучение основ C++. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Perevod-programmnogo-koda-s-C-na-Java-id561ad20eae2015910e8b4567#findElement_E7045_561bf510ae20153306b12ea8_0 |
Автор: leniviy 12.10.2015, 21:02 |
https://www.mtsystems.com/ Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Perevod-programmnogo-koda-s-C-na-Java-id561ad20eae2015910e8b4567#findElement_E7045_561bf5c8ae2015130cb12c9b_0 |
Автор: Urfin 13.10.2015, 09:21 |
не хило. А если в файле несколько тысяч строк, это не для бедных :) Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Perevod-programmnogo-koda-s-C-na-Java-id561ad20eae2015910e8b4567#findElement_E7045_561ca2f5ae2015925ab12ccc_0 |
Автор: Angel_666 13.10.2015, 16:18 |
Ну как то так :) import java.util.Scanner; public class main { private final int hor = 8; private final int ver = 8; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //выделяем память для массива, эмитирующего шахматную доску int[][] board = new int[8][8]; //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7) int[] horizontal = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] vertical = {-1,-2,-2,-1, 1, 2, 2, 1}; //массив доступности ходов конем int[][] accessibility = {{2,3,4,4,4,4,3,2}, {3,4,6,6,6,6,4,3}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {3,4,6,6,6,6,4,3}, {2,3,4,4,4,4,3,2}}; //переменные, запоминающие текущие координаты нахождения коня int currentRow, currentColumn; //переменная, определяющая вариант хода конем(от 0 до 7) int moveNumber; //счетчик ходов конем int counter = 0; //предложение ввода координаты нахождения коня по горизонтали System.out.println("Enter a horizontal coordinate(0 - 7): "); //сохранение введенных данных в переменной currentRow = scanner.nextInt(); //ввод координаты по вертикали System.out.println("Enter a vertical coordinate(0 - 7): "); //сохранение данных ввода currentColumn = scanner.nextInt(); //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их int mainRow = currentRow, mainColumn = currentColumn; //переменные для записи координат следующего хода конем int Row = 0, Column = 0; //начинаем поиск решения for(int i = 1; i <= 64; i++) { board[mainRow][mainColumn] = ++counter; //делаем равным максимально возможной доступности int minAccessibility = 8; //временные переменные для исследования субдоступностей int minA = 8, minB = 8; //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной for(moveNumber = 0; moveNumber <= 7; moveNumber++) { //запоминаем положение коня на доске перед модификацией для изменения доступностей currentRow = mainRow; currentColumn = mainColumn; //исследуем доступность всех возможных ходов не выходящих за границы доски currentRow += horizontal[moveNumber]; currentColumn += vertical[moveNumber]; //не выходит ли за границы доски if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7) { //уменьшаем доступность всех клеток в одном ходу accessibility[currentRow][currentColumn]--; //если доступность больше, то меняем на меньшую if(minAccessibility > accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0) { //нашли минимальную доступность и ее координаты minAccessibility = accessibility[currentRow][currentColumn]; //если не ходили на нее еще то делаем на нее ход if(board[currentRow][currentColumn] == 0) { //подготовили координаты к ходу на эту клетку Row = currentRow; Column = currentColumn; } //временных переменные для нахождения минимальной доступности у тех, что меньше int RowA = currentRow, ColumnA = currentColumn; for(int moveA = 0; moveA <= 7; moveA++) { RowA += horizontal[moveA]; ColumnA += vertical[moveA]; if(RowA >= 0 && RowA <= 7 && ColumnA >= 0 && ColumnA <= 7) { if(minA >= accessibility[RowA][ColumnA] && board[RowA][ColumnA] == 0) //наименьшая доступность следующего хода minA = accessibility[RowA][ColumnA]; } } } //если доступности равны if(minAccessibility == accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0) { minAccessibility = accessibility[currentRow][currentColumn]; //временных переменные для нахождения минимальной доступности у тех, что равны int RowB = currentRow, ColumnB = currentColumn; for(int moveB = 0; moveB <= 7; moveB++) { RowB += horizontal[moveB]; ColumnB += vertical[moveB]; if(RowB >= 0 && RowB <= 7 && ColumnB >= 0 && ColumnB <= 7) { if(minB >= accessibility[RowB][ColumnB] && board[RowB][ColumnB] == 0) //наименьшая доступность следующего хода minB = accessibility[RowB][ColumnB]; } } //если не ходили на нее еще то делаем на нее ход if(board[currentRow][currentColumn] == 0 && minB < minA) { //изменяем подготовленные для следующего хода координаты в случае, если доступность следующего хода меньше Row = currentRow; Column = currentColumn; } } } } mainRow = Row; mainColumn = Column; } //вызов функции для печати массива, моделирующего шахматную доску printBoard(board); System.out.println("End"); } //вывод массива, печатающего шахматную доску, на экран static void printBoard(int[][] board) { for(int j = 0; j < 8; j++) { for(int i = 0; i < 8; i++) { System.out.print(board[i][j] + "\t"); } System.out.println(); } } } Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Perevod-programmnogo-koda-s-C-na-Java-id561ad20eae2015910e8b4567#findElement_E7045_561d04b3ae2015ab61b12ccf_0 |
Автор: Angel_666 13.10.2015, 16:29 |
Кому нужно вот под C# using System; namespace Journey_of_the_horse { class Program { //глобальные константы, определяющие размерность массива board const int hor = 8, ver = 8; //прототип функции для вывода массива, имитирующего шахматную доску, на экран public static void Main(string[] args) { //выделяем память для массива, эмитирующего шахматную доску int[,] board = new int[hor, ver]; //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7) int[] horizontal = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] vertical = {-1,-2,-2,-1, 1, 2, 2, 1}; //массив доступности ходов конем int[,] accessibility = new int[hor, ver] {{2,3,4,4,4,4,3,2}, {3,4,6,6,6,6,4,3}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {3,4,6,6,6,6,4,3}, {2,3,4,4,4,4,3,2}}; //переменные, запоминающие текущие координаты нахождения коня int currentRow, currentColumn; //переменная, определяющая вариант хода конем(от 0 до 7) int moveNumber; //счетчик ходов конем int counter = 0; //предложение ввода координаты нахождения коня по горизонтали Console.Write("Enter a horizontal coordinate(0 - 7): "); //сохранение введенных данных в переменной currentRow = int.Parse(Console.ReadLine()); //ввод координаты по вертикали Console.Write("Enter a vertical coordinate(0 - 7): "); //сохранение данных ввода currentColumn = int.Parse(Console.ReadLine()); //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их int mainRow = currentRow, mainColumn = currentColumn; //переменные для записи координат следующего хода конем int Row = 0, Column = 0; //начинаем поиск решения for(int i = 1; i <= 64; i++) { board[mainRow, mainColumn] = ++counter; //делаем равным максимально возможной доступности int minAccessibility = 8; //временные переменные для исследования субдоступностей int minA = 8, minB = 8; //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной for(moveNumber = 0; moveNumber <= 7; moveNumber++) { //запоминаем положение коня на доске перед модификацией для изменения доступностей currentRow = mainRow; currentColumn = mainColumn; //исследуем доступность всех возможных ходов не выходящих за границы доски currentRow += horizontal[moveNumber]; currentColumn += vertical[moveNumber]; //не выходит ли за границы доски if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7) { //уменьшаем доступность всех клеток в одном ходу accessibility[currentRow,currentColumn]--; //если доступность больше, то меняем на меньшую if(minAccessibility > accessibility[currentRow,currentColumn] && board[currentRow,currentColumn] == 0) { //нашли минимальную доступность и ее координаты minAccessibility = accessibility[currentRow,currentColumn]; //если не ходили на нее еще то делаем на нее ход if(board[currentRow,currentColumn] == 0) { //подготовили координаты к ходу на эту клетку Row = currentRow; Column = currentColumn; } //временных переменные для нахождения минимальной доступности у тех, что меньше int RowA = currentRow, ColumnA = currentColumn; for(int moveA = 0; moveA <= 7; moveA++) { RowA += horizontal[moveA]; ColumnA += vertical[moveA]; if(RowA >= 0 && RowA <= 7 && ColumnA >= 0 && ColumnA <= 7) { if(minA >= accessibility[RowA,ColumnA] && board[RowA,ColumnA] == 0) //наименьшая доступность следующего хода minA = accessibility[RowA,ColumnA]; } } } //если доступности равны if(minAccessibility == accessibility[currentRow,currentColumn] && board[currentRow,currentColumn] == 0) { minAccessibility = accessibility[currentRow,currentColumn]; //временных переменные для нахождения минимальной доступности у тех, что равны int RowB = currentRow, ColumnB = currentColumn; for(int moveB = 0; moveB <= 7; moveB++) { RowB += horizontal[moveB]; ColumnB += vertical[moveB]; if(RowB >= 0 && RowB <= 7 && ColumnB >= 0 && ColumnB <= 7) { if(minB >= accessibility[RowB,ColumnB] && board[RowB,ColumnB] == 0) //наименьшая доступность следующего хода minB = accessibility[RowB,ColumnB]; } } //если не ходили на нее еще то делаем на нее ход if(board[currentRow,currentColumn] == 0 && minB < minA) { //изменяем подготовленные для следующего хода координаты в случае, если доступность следующего хода меньше Row = currentRow; Column = currentColumn; } } } } mainRow = Row; mainColumn = Column; } //вызов функции для печати массива, моделирующего шахматную доску printBoard(board); Console.ReadKey(true); } //вывод массива, печатающего шахматную доску, на экран static void printBoard(int[,] board) { Console.WriteLine(); for(int j = 0; j < ver; j++) { for(int i = 0; i < hor; i++) { Console.Write("{0,4:D}", board[i,j]); } Console.Write("\r\n"); } } } } Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Perevod-programmnogo-koda-s-C-na-Java-id561ad20eae2015910e8b4567#findElement_E7045_561d074aae20154764b12cd1_0 |