Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
AntonSaburov
Дата 24.12.2004, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Чтобы тема не закисала smile

Написать программу, которая обходит квадратную доску ходом коня.
Типа такого (у меня 7x7) но можно и 70x70.



Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  untitled.JPG
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 24.12.2004, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Решениe, мягко говоря, хреновое, нo работает:
Код

import java.awt.*;
import java.util.*;

public class test
{
   public static int size = 7;
   
   public void getNext(int[][] src, Point p, Vector path)
   {
       int[][] curArr = copy(src);
       curArr[p.x][p.y] = 0;
       path.add(new Point(p.x, p.y));
       if (isFinished(curArr))
       {
           printPath(path);
           return;
       }
       Point p1 = new Point(p.x + 1, p.y + 2);
       Point p2 = new Point(p.x - 1, p.y + 2);
       Point p3 = new Point(p.x + 1, p.y - 2);
       Point p4 = new Point(p.x - 1, p.y - 2);
       Point p5 = new Point(p.x + 2, p.y + 1);
       Point p6 = new Point(p.x + 2, p.y - 1);
       Point p7 = new Point(p.x - 2, p.y + 1);
       Point p8 = new Point(p.x - 2, p.y - 1);
       if (isValid(p1) && curArr[p1.x][p1.y] != 0) getNext(curArr, p1, copyPath(path));
       if (isValid(p2) && curArr[p2.x][p2.y] != 0) getNext(curArr, p2, copyPath(path));
       if (isValid(p3) && curArr[p3.x][p3.y] != 0) getNext(curArr, p3, copyPath(path));
       if (isValid(p4) && curArr[p4.x][p4.y] != 0) getNext(curArr, p4, copyPath(path));
       if (isValid(p5) && curArr[p5.x][p5.y] != 0) getNext(curArr, p5, copyPath(path));
       if (isValid(p6) && curArr[p6.x][p6.y] != 0) getNext(curArr, p6, copyPath(path));
       if (isValid(p7) && curArr[p7.x][p7.y] != 0) getNext(curArr, p7, copyPath(path));
       if (isValid(p8) && curArr[p8.x][p8.y] != 0) getNext(curArr, p8, copyPath(path));
   }
   
   public static void main(String [] args)
   {
       int[][] array = new int[size][size];
       for (int i = 0; i < size; i++)
           for (int j = 0; j < size; j++)
               array[i][j] = 1;
       new test().getNext(array, new Point(0,0), new Vector());
   }
   
   public static void printPath(Vector path)
   {
       for (int i = 0; i < path.size(); i++)
       {
           Point p = (Point)path.get(i);
           System.out.print("(" + p.x + "," + p.y + ") ");
       }
       System.out.println();
       System.exit(0);
   }
   
   public static boolean isFinished(int[][] arr)
   {
       for (int i = 0; i < arr.length; i++)
           for (int j = 0; j < arr[0].length; j++)
               if (arr[i][j] == 1) return false;
       return true;
   }
   
   public static boolean isValid(Point p)
   {
       if (p.x < 0 || p.x >= size || p.y < 0 || p.y >= size) return false;
       return true;
   }
   
   public static int[][] copy(int[][] src)
   {
       int[][] cpy = new int[src.length][src[0].length];
       for (int i = 0; i < src.length; i++)
           for (int j = 0; j < src[0].length; j++)
               cpy[i][j] = src[i][j];
       return cpy;
   }
   
   public static Vector copyPath(Vector src)
   {
       int n = src.size();
       Vector cpy = new Vector(n+1);
       for (int i = 0; i < n; i++)
       {
           Point p = (Point) src.get(i);
           cpy.add(new Point(p.x, p.y));
       }
       return cpy;
   }
}



ПС Для 7х7 я получил вот что:
(0,0) (1,2) (2,4) (3,6) (4,4) (5,6) (6,4) (5,2) (6,0) (4,1) (5,3) (6,5) (4,6) (5,4) (6,6) (4,5) (3,3) (2,5) (1,3) (0,5) (2,6) (3,4) (4,2) (6,1) (4,0) (2,1) (0,2) (1,0) (3,1) (5,0) (6,2) (4,3) (5,5) (6,3) (5,1) (3,2) (2,0) (0,1) (2,2) (3,0) (1,1) (0,3) (1,5) (2,3) (0,4) (1,6) (3,5) (1,4) (0,6)

Это сообщение отредактировал(а) Domestic Cat - 24.12.2004, 20:52

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  test.java


--------------------

PM   Вверх
Domestic Cat
Дата 24.12.2004, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



ППС чтоб получить все варианты, достатoчно убрать System.exit.


--------------------

PM   Вверх
AntonSaburov
Дата 27.12.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Есть еще особенность - существует оптимизированный алгоритм обхода доски (имени кого-то на В smile ). Надо прыгать на ту клетку, откуда меньше всего ходов. В этом случае гарантируется, что доска будет обходится целиком при размере от 5x5 - 72x72
PM MAIL WWW ICQ   Вверх
Oracle
Дата 27.12.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



Варнсдорф???
http://algolist.manual.ru/maths/combinat/knight.php -- кто не хочет видеть ответ, не заходите smile
PM MAIL   Вверх
Oracle
Дата 27.12.2004, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



Позвольте мне дать вам задачку(довольно легкую и похожую на те задачки, которые были в начале этого раздела):
Код

interface Interface {
 
}
public class Adventure implements Interface {
  public static void main(String args[]) {
     
  }
}

Задание: Вывести строку "Yes" с помощью System.out.println(), НО этот метод нельзя помещать в тело метода main(), изменять можно только тело интерфейса и тело метода main().Новые внешние классы добавлять нельзя.

Это сообщение отредактировал(а) Oracle - 27.12.2004, 18:32
PM MAIL   Вверх
Domestic Cat
Дата 27.12.2004, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Чет я не совсем понял:
Код

interface Interface {
 
}
public classAdventure implements Interface {
static
{
 System.out.println("Yes");
}
  public static void main(String args[]) {
     
  }
}



--------------------

PM   Вверх
Oracle
Дата 27.12.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



Domestic Cat
Действительно не совсем...Тело класса менять нельзя..Можно менять только тело метода main() и тело интерфейса.Твой ответ в "правила" задачи не подходит...Ты изменил тело класса.

Это сообщение отредактировал(а) Oracle - 27.12.2004, 17:33
PM MAIL   Вверх
Domestic Cat
Дата 27.12.2004, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Дык ты ж писал:

Цитата(Oracle @ 27.12.2004, 03:31)
НО этот метод нельзя помещать в тело метода main(),




--------------------

PM   Вверх
Oracle
Дата 27.12.2004, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



метод System.out.println() нельзя помещать в тело метода main()
P.S Правильно я писал smile

Это сообщение отредактировал(а) Oracle - 27.12.2004, 17:34
PM MAIL   Вверх
Oracle
Дата 27.12.2004, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



Новые внешние классы добавлять нельзя smile
Я тут совсем случайно узнал одну вещь, в принципе, я о ней даже и не думал, но когда узнал - почему-то удивился....Хочу от вас ее увидеть.. smile
P.S хотя слово внешние по-моему уже всю соль раскрывает smile
P.S.S у меня глюк был, или ты постил сюда сообщение,а потом стер?

Это сообщение отредактировал(а) Oracle - 27.12.2004, 18:43
PM MAIL   Вверх
AntonSaburov
Дата 27.12.2004, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Ты говорил про ВНЕШНИЕ классы

Код

interface Interface {
}

public class Adventure implements Interface
{
   static class Int
   {
       public void show()
       {
           System.out.println("Yes");
       }
   }

   public static void main(String args[])
   {
       Int i = new Int();
       i.show();
   }
}

PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 27.12.2004, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Ну или вообще локальный анонимный класс добавить.


--------------------

PM   Вверх
Oracle
Дата 27.12.2004, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 26.11.2004

Репутация: нет
Всего: 3



Наверное "задачка" плохая...или я плохо обьяснил, честно говоря, я хотел от вас добиться вот этого: smile
interface Interface {
static class A {
public static void f() {
System.out.println("Yes");
}
}
}
public class Adventure implements Interface {
public static void main(String args[]) {
new A().f();
}
}
PM MAIL   Вверх
AntonSaburov
Дата 27.12.2004, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Во, вспомнил задачку из старого собеседования. Только отвечать без проверки.

1. Может ли абстрактный класс содержать не абстрактные методы ?
2. Может ли не абстрактный класс содержать абстрактные методы ?
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.