迷路:
問題の説明:
そのような1のような2次元配列の迷路壁を示し、0は開始と終了点を設定し、空間を表し、先頭から迷路の端部にボールを自分自身を聞かせて、パス、および2のパス識別子に着手。
コードの実装:
1 パッケージcn.ftf.digui。
2
3 パブリック クラスMiGong {
4 パブリック 静的 ブール findPath(INT [] [] ARR、int型 I、int型のJ){
5 // 结束条件
6 場合(ARR [6] [5] == 2 ){
7 戻り 真。
8 }
9 もし(ARR [I] [J] == 0 ){
10の ARR [I] [J] = 2 ;
11 場合(findPathは(ARR、I 1 + {、J))
12 リターン 真;
13 } そう であれば(findPath(ARR、I、J + 1 )){
14 リターン 真。
15 } そう であれば(findPath(ARR、I-1 、J)){
16 リターン 真。
17 } そう であれば(findPath(ARR、I、J-1 )){
18 リターン 真。
19 } 他{
20の ARR [I] [J] = 3 ;
21 リターン はfalse ;
22 }
23 } 他{
24 リターン 偽。
25 }
26 }
27 公共 静的 ボイドメイン(文字列[]引数){
28 のint [] []地図= 新しい INT [8] [7 ]。
29 のために(int型 i = 0; iが7 <; Iは++ ){
30 地図[0] [I] = 1 。
31 地図[7] [I] = 1 。
32 }
33 のために(INT J = 0; J <7; J ++ ){
34 地図[j] [0] = 1;
35 地図[J] [6] = 1 。
36 }
37 マップ[3] [1] = 1 。
38 地図[3] [2] = 1 。
39 地図[5] [5] = 1 。
40 // マップ[6] [5] = 1。
41 のSystem.out.println( "初始地图:" )。
42 のためには、(int型、iは8 <; I = 0 iは++ ){
43 のための(int型 J = 0; J <7; J ++ ){
44 System.out.print(マップ[I] [J] +」 " )。
45 }
46 のSystem.out.println();
47 }
48
49 findPath(マップ、1,1 )。
50 のSystem.out.println( "最终地图:" )。
51 のためには、(int型、iは8 <; I = 0 iは++ ){
52 のための(int型 J = 0; J <7; J ++ ){
53 System.out.print(マップ[I] [J] +」 " )。
54 }
55 のSystem.out.println();
56 }
57 }
58 }
結果:
八のクイーンズ問題(Nクイーン問題)
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 ≥ 1 或 n1 ≥ 4 时问题有解。
算法步骤分析:
代码实现:
1 package cn.ftf.queue8;
2
3 public class Queue8 {
4 private static int max=8;
5 private static int[] arr=new int[max];
6 private static int count=1;
7
8 //每生成一种解法,将这种解法打印出来
9 private static void print() {
10 for(int i=0;i<max;i++) {
11 System.out.print(arr[i]+" ");
12 }
13 System.out.println("这是第"+(count++)+"种解法!");
14 }
15
16 //判断这个棋子是否与前面的冲突
17 private static boolean judge(int i) {
18 for(int j=0;j<i;j++) {
19 if(arr[j]==arr[i]||Math.abs(arr[j]-arr[i])==Math.abs(j-i)) {
20 return false;
21 }
22 }
23 return true;
24 }
25
26 //挨个的放棋子
27 private static void put(int i) {
28 if(i==max) {
29 print();
30 return;
31 }else {
32 for(int j=0;j<max;j++) {
33 arr[i]=j;
34 if(judge(i)) {
35 put(i+1);
36 }
37 }
38 }
39 }
40
41 public static void main(String[] args) {
42 put(0);
43 }
44 }
运行结果:
共92种解法!