深度優先搜索題:找到最長的路徑,計算這樣的路徑有多少條(使用回溯)
分析題意可以得知,每次向前后左右走一步,直至走完16步就算一條走通路徑。要求條件是不能超出4*4的范圍,不能重復之前的路徑。
①控制條件,若下一步已經被占有則返回
②控制條件,若下一步越界則返回
③控制條件,若下一步已到達末尾則返回,并且統計值+1
④若不在上述三個條件中則繼續進行下一個點前后左右的試探,進去時需要將標記值設為1,出來后標記值為0
⑤主函數調用,將16個點每個都作為起點,調用回溯函數算出全部統計值
⑥輸出統計值
代碼如下👇
static int[] dx= {0,1,0,-1};static int[] dy= {1,0,-1,0};static int[][] arr=new int[4][4];static int count=0;public static void main(String[] args) {for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {snack(i, j, 0);}}System.out.println(count);}//玩具蛇public static void snack(int x,int y,int len) {if (x>=4 || x<0 || y>=4 || y<0) {//先看有沒有越界return;}if (arr[x][y]==1) {//下一步已經被占有return;}if (len>=15) {//走到結尾count ++;return;}for (int i = 0; i < 4; i++) {arr[x][y]=1;snack(x+dx[i], y+dy[i], len+1);arr[x][y]=0;//回溯精精髓}}
運行結果