2013-06-11 1 views
0
import java.util.Random; 

public class Sudoku { 
    int[][] SquareNumbers = { 
     { 4, 3, 5, 8, 7, 6, 1, 2, 9 }, { 8, 7, 6, 2, 1, 9, 3, 4, 5 }, { 2, 1, 9, 4, 3, 5, 7, 8, 6 }, 
     { 5, 2, 3, 6, 4, 7, 8, 9, 1 }, { 9, 8, 1, 5, 2, 3, 4, 6, 7 }, { 6, 4, 7, 9, 8, 1, 2, 5, 3 }, 
     { 7, 5, 4, 1, 6, 8, 9, 3, 2 }, { 3, 9, 2, 7, 5, 4, 6, 1, 8 }, { 1, 6, 8, 3, 9, 2, 5, 7, 4 } }; 

    Random Digits = new Random(); // random numbers to exchange Rows 
    Random HiddenNumbers = new Random(); 
    int Grid[][] = new int[9][9]; 

    public int[][] Generator() { 
    for (int x = 0; x < Digits.nextInt(); x++) { 
     for (int da = 0; da < 3; da++) { 

     } 
    } 

    return SquareNumbers; 
    } 

    int[][] Hide() { 
    for (int i = 0; i < 9; i++) 
     for (int j = 0; j < 9; j++) 
     Grid[i][j] = SquareNumbers[i][j]; 

    int Row, Columns, Concealer; 

    Concealer = 55 + Digits.nextInt(1); 

    for (int i = 0; i < Concealer; i++) { 
     Row = HiddenNumbers.nextInt(9); 
     Columns = HiddenNumbers.nextInt(9); 
     Grid[Row][Columns] = -1; 
    } 
    return Grid; 
    } 

    public int[][] getSquareNumbers() { 
    return SquareNumbers; 
    } 

    public void setSquareNumbers(int[][] SquareNumbers) { 
    this.SquareNumbers = SquareNumbers; 
    } 

    private static Sudoku instance = null; 

    protected Sudoku() { 
    // Exists only to defeat instantiation. 
    } 

    public static Sudoku getInstance() { 
    if (instance == null) { 
     instance = new Sudoku(); 
    } 
    return instance; 
    } 
} 

이중 배열 목록 대신 무작위로 배열하여 스도쿠 게임처럼 사용할 수 있습니까? 마찬가지로 그것은 열이나 행에 중복이 없으며 세 x 씩 작은 격자는 한 번만 숫자를 사용합니까? 다음과 같이 될 것이다 무작위 스도쿠 퍼즐을 생성하기위한Java : 중복되지 않은 배열 목록을 랜덤 화하는 방법

+3

무엇을 원하세요? 스도쿠 생성기? 이것은 "일치하지 않는 숫자를 섞어서 제거하는 것"만큼 쉽지는 않습니다 (어렵지는 않지만). 8 퀸 문제에 대한 검색 – SJuan76

+2

스도쿠 생성기에 관한 많은 문헌이 있습니다. 둘러 보셨습니까? – Patashu

+6

Java 규약에 충실하고 작은 글자로 변수를 시작하십시오. 대문자는 클래스 이름입니다! –

답변

1

한 가지 방법 :

  1. 무작위로 숫자를 교환 스도쿠 퍼즐의 제약 조건을 만족하는 임의의 퍼즐을 생성합니다 (예를 들어 1 초와 3 초, 7S와 2 초를 교체 등)
  2. 무작위 3들의 세트 내의 행 또는 열을 교환 (예를 들면 첫 번째 및 세 번째 열, 또는 5, 6)
  3. 무작위 열의 다른 세트로 3 열 또는 행 세트 스위치를 교환.

이들은 서로 다른 퍼즐처럼 보이지만 사실 모두 등방성 라틴 사각형 (즉, 행/열 순서를 변경하여 동일한 퍼즐로 축소 될 수 있기 때문에 모두 등가 임)입니다. 좀 더 무작위 솔루션을 원하는 경우

이 이미 여기에 답이있을 수 https://stackoverflow.com/a/6964044/2471910