本文實例講述了Java基于二維數組實現的數獨問題。分享給大家供大家參考,具體如下:
這里利用Java二維數組實現數獨問題。
(1)生成簡易數獨
(2)生成數獨問題**
代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
import java.util.Random; import java.util.ArrayList; public class Suduku { /** *打印二維數組,數獨矩陣 */ public static void printArray( int a[][]) { for ( int i = 0 ; i < 9 ; i++) { for ( int j = 0 ; j < 9 ; j++) { System.out.print( " " +a[i][j]); if ( 0 ==((j+ 1 )% 3 )) { System.out.print( " " ); } } System.out.println(); if ( 0 ==((i+ 1 )% 3 )) { System.out.println(); } } } /** * 產生一個1-9的不重復長度為9的一維數組 */ public static ArrayList<Integer> creatNineRondomArray() { ArrayList <Integer>list = new ArrayList<Integer>(); Random random= new Random(); for ( int i = 0 ; i < 9 ; i++) { int randomNum=random.nextInt( 9 )+ 1 ; while ( true ) { if (!list.contains(randomNum)) { list.add(randomNum); break ; } randomNum=random.nextInt( 9 )+ 1 ; } } System.out.println( "生成的一位數組為:" ); for (Integer integer : list) { System.out.print( " " +integer.toString()); } System.out.println(); return list; } /** *通過一維數組和原數組生成隨機的數獨矩陣 * *遍歷二維數組里的數據,在一維數組找到當前值的位置,并把一維數組 *當前位置加一處位置的值賦到當前二維數組中。目的就是將一維數組為 *依據,按照隨機產生的順序,將這個9個數據進行循環交換,生成一個隨 *機的數獨矩陣。 * */ public static void creatSudokuArray( int [][]seedArray,ArrayList<Integer> randomList) { for ( int i = 0 ; i < 9 ; i++) { for ( int j = 0 ; j < 9 ; j++) { for ( int k = 0 ; k < 9 ; k++) { if (seedArray[i][j]==randomList.get(k)) { seedArray[i][j]=randomList.get((k+ 1 )% 9 ); break ; } } } } System.out.println( "處理后的數組" ); Suduku.printArray(seedArray); } public static void creatSudokuQuestion( int [][] a) { Random rand= new Random(); for ( int i= 0 ;i< 9 ;i++){ for ( int j= 0 ;j< 4 ;j++){ a[i][( int )rand.nextInt( 9 )]= 0 ; } } Suduku.printArray(a); } // public static void main(String[] args) { int seedArray[][]={ { 9 , 7 , 8 , 3 , 1 , 2 , 6 , 4 , 5 }, { 3 , 1 , 2 , 6 , 4 , 5 , 9 , 7 , 8 }, { 6 , 4 , 5 , 9 , 7 , 8 , 3 , 1 , 2 }, { 7 , 8 , 9 , 1 , 2 , 3 , 4 , 5 , 6 }, { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }, { 4 , 5 , 6 , 7 , 8 , 9 , 1 , 2 , 3 }, { 8 , 9 , 7 , 2 , 3 , 1 , 5 , 6 , 4 }, { 2 , 3 , 1 , 5 , 6 , 4 , 8 , 9 , 7 }, { 5 , 6 , 4 , 8 , 9 , 7 , 2 , 3 , 1 } }; System.out.println( "原始的二維數組:" ); Suduku.printArray(seedArray); ArrayList<Integer> randomList=Suduku.creatNineRondomArray(); Suduku.creatSudokuArray(seedArray, randomList); System.out.println( "生成數獨問題:" ); Suduku.creatSudokuQuestion(seedArray); } } |
輸出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
原始的二維數組: 9 7 8 3 1 2 6 4 5 3 1 2 6 4 5 9 7 8 6 4 5 9 7 8 3 1 2 7 8 9 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 8 9 7 2 3 1 5 6 4 2 3 1 5 6 4 8 9 7 5 6 4 8 9 7 2 3 1 生成的一位數組為: 2 3 9 1 6 8 7 5 4 處理后的數組 1 5 7 9 6 3 8 2 4 9 6 3 8 2 4 1 5 7 8 2 4 1 5 7 9 6 3 5 7 1 6 3 9 2 4 8 6 3 9 2 4 8 5 7 1 2 4 8 5 7 1 6 3 9 7 1 5 3 9 6 4 8 2 3 9 6 4 8 2 7 1 5 4 8 2 7 1 5 3 9 6 生成數獨問題: 0 5 7 9 6 3 0 0 0 9 6 3 0 0 0 0 5 7 0 2 4 1 0 7 9 6 0 5 0 1 6 0 9 2 0 0 6 0 9 2 0 0 5 7 0 2 0 8 0 7 1 0 3 9 7 1 5 0 0 6 4 8 2 3 0 6 4 8 2 7 0 5 4 8 2 7 0 0 3 9 6 |
希望本文所述對大家java程序設計有所幫助。
原文鏈接:http://blog.csdn.net/qq_37999723/article/details/78348172