2014-05-13 2 views
0

나는 w * h 격자에 n 개의 객체를 배치하는 모든 가능한 조합을 얻는 방법을 찾고 있습니다. 내가 대답해야 할 질문은 다음과 같은 질문입니다. 어떤 방법으로 체스 판에 졸을 놓을 수 있습니까? 예를 들어 두 개의 폰 및 2x2 격자의 경우 예상 결과는격자상의 placemenet의 모든 가능한 조합 찾기

((0, 0, "p1"), (0, 1, "p2")) 
((0, 0, "p1"), (1, 1, "p2")) 
((0, 0, "p1"), (1, 0, "p2")) 
((0, 1, "p1"), (1, 1, "p2")) 
((0, 1, "p1"), (0, 0, "p2")) 
((0, 1, "p1"), (1, 0, "p2")) 
((1, 0, "p1"), (0, 1, "p2")) 
((1, 0, "p1"), (1, 1, "p2")) 
((1, 0, "p1"), (0, 0, "p2")) 
((1, 1, "p1"), (0, 0, "p2")) 
((1, 1, "p1"), (0, 1, "p2")) 
((1, 1, "p1"), (1, 0, "p2")) 

입니다. Java로 어떻게 처리 할 수 ​​있습니까?

답변

0

모든 항목을 컬렉션에 넣고 컬렉션의 모든 위치를 놓고 충돌 확인을 반복합니다. 이 TEH 다음 루프

+0

하이에서 제외 할 수 있도록

boolean foundNewSolutionLastIteration = true; while (foundNewSolutionLastIteration) { foundNewSolutionLastIteration = false; List<Pawn> pawns = new ArrayList<Pawn>() ... Fill the colelction ... List<GridSquare> positions = new ArrayList<GridSquare() ... Fill the collection ... for (Pawn p : pawns) { for (GridSquare square : positions) { ... Check if gridsquare contains pawn, else put it in there ... Check if all pawns have been placed if so it's a valid position ... Is this a new solution? if so set foundNewSolutionLastIteration to true } } } 

각 반복 shouild이 위치를 recford, 솔루션이 나에게 배치 폰 중 하나의 가능한 해결책을 줄 것이다, 내가 원하는 것은 이러한 솔루션을 모두 찾을 수 있습니다. 명확하게 쓰지는 않을 것입니다. 결과물에 필요한 것은 콜렉션 모음이며, 각각에 (0, 0, "p1"), (0, 1, "p2")와 같은 n 개의 트리플이 있어야합니다. .. (각 컬렉션에는 하나의 솔루션이 포함되어 있습니다.) – gysyky

+0

새로운 솔루션을 찾을 때까지 루프에 넣고 반복해야합니다 ... (이것을 반영하기 위해 답을 편집했습니다) –