用遞迴列舉實現八皇后問題

2021-07-10 11:11:21 字數 950 閱讀 3157

#include using namespace std ;

int total = 0 ;

//判斷row行line列是否可以放皇后

bool iscan(int row , int line , int chess[8][8]) }

//判斷左上是否有皇后

for( i = row , j = line ; i >= 0 && j >= 0 ; i-- , j--)

} //判斷右上是否有皇后

for( i = row , j = line ; i >= 0 && j < 8 ; i-- , j++)

} //判斷左下是否有皇后

for( i = row , j = line ; i < 8 && j >= 0 ; i++ , j--)

} //判斷右下是否有皇后

for( i = row , j = line ; i < 8 && j < 8 ; i++ , j++)

} return true ;

}//row表示從0行開始遞迴到最後一行

//line是8列

void eightqueen( int row , int line , int chess[8][8])

} if( row == 8) //如果每行都放了乙個皇后

cout << endl ;

} cout << endl ;

} else

chesscopy[row][i] = 1 ;

eightqueen(row+1 , line , chesscopy) ;// 去下一行裡尋找

}} }

}int main() }

eightqueen( 0 , 8 , chess) ;

return 0;

}

八皇后問題(遞迴實現)

八皇后問題,是乙個古老而著名的問題,是回溯 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。這裡用遞迴演算法實現,因為遞迴在某個層面上就實現了回溯,再演算法中,...

八皇后問題(遞迴實現)

八皇后問題是回溯法的典型例題,就同一問題有許多不同種解法,這裡只通過遞迴解決八皇后問題 所謂八皇后問題是由高斯先生提出的乙個關於西洋棋的數學問題,其要求在8x8的棋盤上放置8個皇后,每個皇后之間不能互相攻擊到對方 皇后的攻擊方式是公尺字型 高斯先生窮其一生發現了76鐘解法,在沒有計算機的年代已經非常...

八皇后 N皇后問題 遞迴實現

八皇后問題,即在乙個棋盤上,每行都可以放置乙個皇后,但每個皇后都不能影響其他皇后的安全,即所有皇后的位置不能在同一直線上 解決問題方法及思想 遞迴 在使用遞迴之前首先要準備好兩個函式實現 1.判斷此時此刻位置是否安全 只需要判斷元素上方,左上方,右上方是否安全,且只要有乙個位置不安全,則結束判斷 2...