“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!

C/C++ code
        
        
#include < iostream > #include < string > using namespace std; class Queen{ public : Queen(); ~ Queen(); private : int result; string queen[ 8 ]; int state[ 8 ]; void set ( int , int ); bool check( int , int ); void print(); }; Queen::Queen(){ result = 0 ; for ( int i = 0 ;i < 8 ;i ++ ){ queen[i] = " -------- " ; } set ( 0 , 0 ); } Queen:: ~ Queen(){ } void Queen:: set ( int i, int j){ if (i == 8 ){ result ++ ; print(); queen[ 7 ] = " -------- " ; set ( 7 ,state[ 7 ] + 1 ); } else if (j == 8 ){ if (i == 0 ) { cout << " " << result << " 种放置方法! " << endl; } else { queen[i - 1 ] = " -------- " ; set (i - 1 ,state[i - 1 ] + 1 ); } } else if (check(i,j)){ queen[i][j] = ' + ' ; state[i] = j; set (i + 1 , 0 ); } else { set (i,j + 1 ); } } bool Queen::check( int i, int j){ for ( int c = 0 ;c < i;c ++ ){ if (state[c] == j || state[c] - j == c - i || state[c] - j == i - c){ return false ; } } return true ; } void Queen::print(){ for ( int i = 0 ;i < 8 ;i ++ ){ cout << queen[i] << endl; } cout << " ====== " << endl; } int main(){ Queen my; system( " pause " ); return 0 ; }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值