八皇后問題 遞迴

2021-04-20 05:48:00 字數 1998 閱讀 8157

問題描述:

在乙個8×8西洋棋盤上,有8個皇后,每個皇后佔一格;要求皇后間不會出現相互「攻擊」的現象,即不能有兩個皇后處在同一行、同一列或同一對角線上。問共有多少種不同的方法。

程式:public

void testeightprince() 

// 初始化,所有的位置都可以放置乙個皇后

for (int x = 0; x < grids.length; x++) 

}int x = 0, y = 0;

for (x = 0; x < 8; x++) 

}// 使棋盤所有的位置都可以放置乙個皇后,回到最初始的狀態

public

void enableallpos(boolean grids) }}

/*** 把棋盤的x,y點所對應的行,列,對角線上的值置成不能放皇后

* * @param grids

* @param x

* @param y

*/public

void disablepos(boolean grids, int x, int y) 

// 右對角線

int count = 1;

while (x + count <= 7 && y + count <= 7) 

count = 1;

while (x - count >= 0 && y - count >= 0) 

// 左對角線

count = 1;

while (x - count >= 0 && y + count <= 7) 

count = 1;

while (x + count <= 7 && y - count >= 0) 

}public

boolean canlay(final

boolean grids, int xpos, int ypos,

int level, string temp) 

// system.out.println(" level 到達最大:" + hasemptypos(grids));

return result;

}/**

* 保持當前棋盤現場,複製乙個棋盤供下一步呼叫

*/boolean newgrids = new

boolean[8][8];

for (int x = 0; x < 8; x++) 

}disablepos(newgrids, xpos, ypos);

position poses = getemptypos(newgrids, xpos);

if (poses == null || poses[0] == null) 

for (int posindex = 0; posindex < poses.length; posindex++) 

}return

false;

}private

class position 

/*** 取得當前棋盤的下乙個可放皇后位置的點的集合,這個決定了搜尋空間的大小, 下面採用了最大減少搜尋空間的方法,即下乙個可放位置點的結合從上乙個可放

* 位置的下乙個x方向的位移上取得。保證了演算法的效率,如果整個棋盤掃瞄, 效率很低,而且會出現重複的情況。

* * @param grids

*            當前棋盤

* @param prevxpos

*            上乙個可放位置的x的座標

* @return

*/public position getemptypos(boolean grids, int prevxpos) }/*

* for(int x = 0; x < 8; x++) } }

*/return list.toarray(new position[1]);

}public

boolean hasemptypos(boolean grids) }}

return

false;

}

八皇后問題 遞迴

八皇后問題 遞迴 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。8 8的棋盤方格 每一行的某一列上要有乙個皇后 public class eightqueen 左上方 for int i 1 r...

八皇后問題 遞迴

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例.在8x8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即 任意兩個皇后都不能處於同一行,同一列或同一斜線上,問有多少中擺法 92 第乙個皇后先放第一行第一列 第二個皇后放在第二行第一列,然後判斷是否ok,如果不ok,繼續放在第二列,第三列,依...

八皇后問題(遞迴版)

author phinecos since 2008 10 31 class eightqueen 第col列不能有多於1個皇后 for i 0 i maxsize i 對角線不能有多於1個皇后 反對角線 for i row 1 j col 1 i 0 j maxsize i,j for i row...