迷宫问题:
问题描述:
用二维数组表示一个迷宫,比如1表示墙,0表示空格,设置一个起点和终点,让小球自己从迷宫的起点到终点走出一条路径,并将路径标识为2。
代码实现:
1 package cn.ftf.digui; 2 3 public class MiGong { 4 public static boolean findPath(int[][]arr,int i,int j) { 5 //结束条件 6 if(arr[6][5]==2) { 7 return true; 8 } 9 if(arr[i][j]==0) { 10 arr[i][j]=2; 11 if(findPath(arr,i+1,j)) { 12 return true; 13 }else if(findPath(arr,i,j+1)){ 14 return true; 15 }else if(findPath(arr,i-1,j)){ 16 return true; 17 }else if(findPath(arr,i,j-1)){ 18 return true; 19 }else { 20 arr[i][j]=3; 21 return false; 22 } 23 }else { 24 return false; 25 } 26 } 27 public static void main(String[] args) { 28 int[][] map=new int[8][7]; 29 for(int i=0;i<7;i++) { 30 map[0][i]=1; 31 map[7][i]=1; 32 } 33 for(int j=0;j<7;j++) { 34 map[j][0]=1; 35 map[j][6]=1; 36 } 37 map[3][1]=1; 38 map[3][2]=1; 39 map[5][5]=1; 40 //map[6][5]=1; 41 System.out.println("初始地图:"); 42 for(int i=0;i<8;i++) { 43 for(int j=0;j<7;j++) { 44 System.out.print(map[i][j]+" "); 45 } 46 System.out.println(); 47 } 48 49 findPath(map,1,1); 50 System.out.println("最终地图:"); 51 for(int i=0;i<8;i++) { 52 for(int j=0;j<7;j++) { 53 System.out.print(map[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种解法!