2010-12-10 3 views
1

이것은 숙제 문제입니다. Java에서 고전 n-Queens 문제에 대한 해결책을 쓰고 있습니다. 내 프로그램은 this처럼 보이지만 출력하는 대신 모든 법적 퀸즈 배치를 반환합니다. 나는 퀸즈 배치를 int[]으로 나타내고, HashSet<int[]>을 구현으로 사용하여 Set<int[]>을 반환합니다. 게재 위치 순서가 중요하지 않으므로 Set이 적합합니다.Java의 고전적인 n-Queens에 대한 구현 질문

Java 배열이 hashCode을 덮어 쓰지 않으며 동일한 값을 가진 여러 배열 인스턴스가 서로 다른 해시 코드를 가지고 있다는 점이 문제입니다.

배열을 보유하고 을 Arrays.deepHashCode으로 재정의하고 Set<QueensPlacement>을 반환하는 래퍼 클래스 QueensPlacements을 작성할 수 있습니다. 그러나 그것은 장황하고 비 숙련 된 것처럼 보입니다. 아무도 더 나은 해결책을 제안 할 수 있습니까?

+1

래퍼 클래스가 아마도 더 좋을 것입니다. Set 가 더 명확하게 보이기 때문에 우아하지 않습니다. 을 설정하십시오. 해시 코드처럼 int []를 사용하여 다른 문제를 해결합니다. 예를 들어, 정확히 n 명의 여왕이 있는지 확인하려면 어떻게해야합니까? 그 크기는 n입니까? – Fakrudeen

답변

2

Set 인터페이스를 구현하는 몇 가지 표준 클래스가 있습니다. TreeSet을 사용하고 자신 만의 비교기를 제공 할 수 있습니다.

1

왜 아닙니다 Set<List<Integer>>?

1

어레이를 보유하고 Arrays.deepHashCode로 hashCode를 대체하고 Set을 리턴하는 래퍼 클래스 QueensPlacements를 작성할 수 있습니다. 그러나 그것은 장황하고 비 숙련 된 것처럼 보입니다.

맞춤 클래스를 만드는 것은 좋지 않을 수도 있습니다. 데이터를 전달하는 래퍼 클래스를 만드는 것만으로도 솔루션 도메인의 본격적인 기능을 수행 할 수있는 다른 방법이 없다는 것이 두려운 것처럼 들릴지 모르겠다. 게재 위치 세트를받는 코드는 어떤 코드를 사용합니까? 코드를받는 사람들을 위해 배치가 제공 할 수있는 방법이 있습니까? 최소한의 디버깅을위한 좋은 toString() 메소드?

* 편집 : *

가 QueensPlacement이 개념 문제 (이 컴퓨터에 문제가되지 않습니다)에 꼭 필요한 것은 게재 위치에 일관성있게 주문, 대한 Comparator<QueensPlacement>을 제공 할 수 있지만, 할 수 있음도 고려 UI가 약간 더 멋지게 설정됩니다 (예 : 동일한 순서의 게재 위치 집합이 동일한 순서로 표시되는 경우 사용자에게 더 좋지 않음).