// vc2010测试通过,回溯法。
#include <iostream>
#include <vector>
using namespace std;
// 打印矩阵
void print_m( const vector< vector< int > > &m, int n )
{
for( int i = 0; i < n; i++ )
{
for( int j = 0; j < n; j++ )
cout << m[i][j];
cout << endl;
}
cout << endl;
}
// 判断当前矩阵是否合法(即current_line, current_col位置是否可以填1)
bool is_current_line_col_right( vector< vector< int > > &m, const int &n, int current_line, int current_col )
{
for ( int i = 0; i < current_line; i++ )
if ( m[i][current_col] )
return false;
return true;
}
// 尝试在当前行填一个1
void try_set_current_line( vector< vector< int > > &m, const int &n, int current_line )
{
for ( int i = 0; i < n; i++ )
{
if ( is_current_line_col_right( m, n, current_line, i ) )
{
m[current_line][i] = 1;
if ( current_line == n - 1 ) // 最后1行
print_m( m, n );
else
try_set_current_line( m, n, current_line + 1 );
m[current_line][i] = 0;
}
}
}
// 找出所有合法的n*n矩阵,并打印出来
void find_all_matrixes( int n )
{
vector< vector< int > > m;
m.resize( n );
for ( int i = 0; i < n; i++ )
m[i].resize( n );
try_set_current_line( m, n, 0 );
}
void main()
{
find_all_matrixes( 3 );
find_all_matrixes( 4 );
}
追问你QQ号告诉我呗 为了更好交流 我的是401313881 你加我也可以
追答有问题发我邮箱吧,我极少上QQ。我的邮箱是[email protected]。