求助QAQ
查看原帖
求助QAQ
535338
泠雪夜楼主2021/8/24 11:38

本蒟蒻在看这题@✨✨✨的题解时,有一个地方没看懂,请大佬帮忙指点一下

他的代码

#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是什么意思? 谢谢啦(^▽^)

2021/8/24 11:38
加载中...