遞迴的應用 迷宮問題和八皇后問題

2021-10-16 17:38:18 字數 2099 閱讀 6430

右下角位置為出路

("小球走過,並標識過的 地圖的情況");

for(

int i =

0; i <

8; i++

) system.out.

println()

;}}// 1. map 表示地圖

// 2. i,j 表示當前位置座標

// 3. 如果小球能到 map[6][5] 位置,則說明通路找到.

// 4. 約定: 當map[i][j] 為 0 表示該點沒有走過 當為 1 表示牆; 2 表示通路可以走; 3 表示該點已經走過,但是走不通

// 5. 在走迷宮時,需要確定乙個策略(方法) 下->右->上->左 , 如果該點走不通,再回溯

public

static

boolean

setway

(int

map,

int i,

int j)

else

elseif(

setway

(map, i, j+1)

)elseif(

setway

(map, i-

1, j)

)elseif(

setway

(map, i, j-1)

)else

}else}}

}八皇后問題介紹

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即:任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

思路分析

**實現

package com.whb.recursion;

public

class

queen8

/** *

* @param n 當前在第幾行(或第幾個皇后)

* @return

*/public

static

boolean

judge

(int n)

}return

true;}

/** *

* @param n 當前到第幾個皇后了

* @return

*/public

static

void

check

(int n)

// 遍歷這一行的每乙個位置

// 當前行遍歷完後,有回溯

for(

int i =

0; i < max; i++)}

}// 列印

public

static

void

print()

system.out.

println();}}

遞迴 迷宮問題和八皇后問題

map i j 0表示未走過,可以嘗試 1表示牆 2表示該路,可以走通 3表示該路,已走過,但走不通 當 map 6 5 2,則已到達目的地 最右下角 結束遞迴 public static void main string args 第1列和7行,使用1填牆 for int h 1 h horizo...

遞迴應用 八皇后問題

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當 n2...

遞迴回顧(迷宮問題,八皇后問題)

簡單的說 遞迴就是方法自己呼叫自己,每次呼叫時傳入不同的變數,遞迴有助於程式設計者解決複雜的問題,同時讓 變得簡潔。遞迴呼叫規則 1.當程式執行到乙個方法的時候,就會開闢乙個獨立的空間棧 2.每個空間的資料 區域性變數 是獨立的 列印問題 8public static void test int n...