阿翔 發問時間: 電腦與網際網路程式設計 · 1 0 年前

八皇后C語言

http://tw.knowledge.yahoo.com/question/question?qi...

我想請問ㄧ下,裡面的這段是什麼意思

if(board[i]==board[n] || (n-i)==abs(board[i]-board[n]))return true;

爲什麼它可以ㄧ行就做出判斷,感激不盡,還有,這裡會什麼這樣設  for(int i=0;i<MAX;i++){ board[n]=i;

越詳細越好

2 個解答

評分
  • 1 0 年前
    最佳解答

    那在 check_cross

    也就是說:它檢查:能不能放 queen 在那裡!

    board[i]==board[n] // 同列

    (n-i) == abs(board[i]-board[n]) // 同斜線

    如果 (同列 或 同斜線)

    傳回 會吃到!

    那個 loop 檢查現在新放的 (n) 會不會吃到之前的任一個。

    回到 put_chess(n)

    現在放第 n 個 Queen在第 n 行。

    它可以放在 0 ~ MAX-1 列上。

    board[n] 表示第 n 個 queen 放在第 n 行,第 board[n] 的值那列上。

    從第 0 列試放起。(board[n] = i;)

    放完了,請 check_cross(n) 檢查一下這個 Queen 放這裡會不會吃到之前放好的。

    會,那放到下一列上(i )

    不會,如果放完了(n==MAX-1),那找到囉!

       如果沒放完,那放下一行( put_chess(n 1) )

    你根據我講的,想一下。

    再去 trace 程式,應該就會懂了。

    不懂再問,看是哪不懂。

    加油 ^_^

    2007-04-01 23:27:33 補充:

    如上述:

    board[i] 陣列存的是第 i 個 Queen 放在第 i 行、第 board[i] 的值的那列上。

    board[i] == board[n] 是在看 第 i 和 第 n 個 Queen 有沒有在同一列上

    n-i 是它們的行差,因為 i < n ,所以 n-i 一定 > 0

    board[i] - board[n] 是它們的列差。不知誰大,所以要加 abs

    如果 行差 == 列差,那就會吃到!不可以放那裡!

  • 1 0 年前

    大致上了解,

    不過為什麼會有board[i]和board[n]同一個陣列要分成兩個來看呢?

    或者board[]這個陣列在這隻程式的用處...?

    C語言才疏學淺呀...

還有問題?馬上發問,尋求解答。