Jaide
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Я только приступил к изучению Java. В книге, по которой пытаюсь учиться встретил задание про 8 ферзей. Потому как в детстве (где-то в 6 лет), когда научился играть в шахматы меня это задача заинтересовала и я уже тогда пытался найти нужное расположение, решил продолжить на джаве. Итак код снизу я настрочил когда думал над заданием. Алгоритм вроде правильный. Вот что у меня получилось: import java.util.Random; public class queens { public static int[][] array = new int[8][8]; public static int[][] array1 = new int[8][8]; private static int q, y; public static void main(String[] args) { Random ran = new Random(); // initializing heuristics for (int x = 0; x < array1.length;x++) { for (int y = 0; y < array1.length; y++) { array1[y][x]= 22; if ( ( (y >= 1) && (y <= 6) && (x >= 1) && (x <= 6 ) ) ) array1[y][x]= 24; if ( ( (y >= 2) && (y <= 5) && (x >= 2) && (x <= 5 ) ) ) array1[y][x]= 26; if ( ( (y >= 3) && (y <= 4) && (x >= 3) && (x <= 4 ) ) ) array1[y][x]= 28; } } // end initialization heuristics // action for (int x = 0; x < array.length; x++) { while (find(x) == false) { y = ran.nextInt(8); if (array[x][y]==0) { place(x, y); control(x, y); display(); } } }// end action } public static void place(int x, int y) { array[x][y]=1; } //метка для контроля public static void placef(int x, int y) { array[x][y] = 2; // } // контроль ячеек охватываемых данным ферзем public static void control(int x, int y) { q = x - y; for (int t = y+1; t < array.length; t++) placef(x, t); // control to the right for (int t = y-1; t >= 0; t--) placef(x, t); // control to the left for (int u = x+1; u < array.length; u++) placef(u, y); // control down for (int s = x+1; s < array.length; s++) for (int m = y+1; m < array.length; m++) // control diagonal right if (q == s-m) placef(s,m); q = x+y; for (int s = x+1; s < array.length; s++) for (int m = y-1; m >=0; m--) // control diagonal left if (q == s+m) placef(s,m); } // displaying the matrix public static void display() { for (int x = 0; x < array.length;x++) { for (int y = 0; y < array.length; y++) System.out.printf("%d ", array[x][y]); System.out.println(); } System.out.println(); } //находит нужное значение ячейки в данном ряду public static boolean find(int x) { boolean t = false; while (y < 8) { if (array[x][y] == 1) t = true; y++; } return t; } }//end class Вопрос же вот в чем. В этом коде есть какие-нибудь ошибки, связанные с уменьшением эффективности (память, лишние данные, пр) оного? Потому как начинаю не столько джаву, сколько программирование вообще, многие вещи могли бы осуществиться на порядок легче. Вопрос связан с тем, что в будущем хочу попытаться с помощью брута (с эвристикой и без) найти хотя бы одно решение. Если здесь будет упущение, то с брутом это упущение будет колоссальным. =) Спасибо за понимание. ПС если что не так в посте, пишите - переправлю. ППС сейчас изучаю по Дейтел, Дейтел 9изд (на англ.), если есть более удачные учебники - напишите, буду премного благодарен | Всего записей: 1 | Зарегистр. 15-12-2011 | Отправлено: 16:02 23-06-2012 | Исправлено: Jaide, 16:06 23-06-2012 |
|