本蒟蒻在看这题@✨✨✨的题解时,有一个地方没看懂,请大佬帮忙指点一下
他的代码
#include<iostream>
using namespace std;
int a[6666],b[6666],c[6666],d[6666]; //个人喜好
//a数组表示的是行;b数组表示的是列;c表示的是左下到右上的对角线;d表示的是左上到右下的对角线;
int count; //总数:记录解的总数
int n; //输入的数,即n*n的格子,全局变量,搜索中要用
int print()
{
if(count <= 2) //保证只输出前三个解,如果解超出三个就不再输出,但后面的count还需要继续叠加
{
for(int k = 1 ; k <= n ; k ++)
cout << a[k]<< " " ; //for语句输出
cout << endl;
}
count ++; //count既是总数,也是前三个排列判断
}
void queen(int i) //搜索与回溯
{
if (i > n)
{
print (); //输出函数
return;
}
else
{
for(int j = 1 ;j <= n ;j ++) //尝试可能位置
{
if((! b[j])&&(! c[i+j])&&(! d[i-j+n])) //如没皇后占领,执行以下
{
a[i] = j; //标记i排是第j个
b[j] = 1; //宣布占领纵列
c[i+j] = 1;
d[i-j+n] = 1;
//占领两条对角线
queen(i+1); //搜索下一个皇后
b[j] = 0;
c[i+j] = 0;
d[i-j+n]= 0;
//(回到上一步)清除标记
}
}
}
}
int main()
{
cin >> n; //输入n*n,n已在全局中定义
queen (1); //first 皇后
cout << count;
return 0;
}
我在```
int print()
{
if(count <= 2) //保证只输出前三个解,如果解超出三个就不再输出,但后面的count还需要继续叠加
{
for(int k = 1 ; k <= n ; k ++)
cout << a[k]<< " " ; //for语句输出
cout << endl;
}
count ++; //count既是总数,也是前三个排列判断
}
void queen(int i) //搜索与回溯
{
if (i > n)
{
print (); //输出函数
return;
这一段代码中的print不太明白,这里print是什么意思? 谢谢啦(^▽^)