焚海拦江 发表于 2020-9-20 22:18:25

关于递归函数里的数组问题

想知道int cur = {True}这一句为什么到递归调用的时候就不能被初始化为True了?

#include <iostream>
#define True 1
#define False 0

using namespace std;
int count = 0;

int search( int line,int n/*当前行*/)
{
        int i;
        int cur = {True};//当前行状态
        if(n == 8)
        {
                count+= 1;
                return 0;
        }       
       
                for(i = 0;i < n;i++)//判断哪些列不可以放
                {
                        cur] = False;
                }
                for(i = 0;i<n;i++)//判断是否在斜边上
                {
                        int k;
                        k = n-i;//行数之差
                        if(line + k < 8)//右边斜线
                        {
                                cur + k] = False;
                        }
                        if(line - k >= 0)//左边斜线
                        {
                                cur - k] = False;
                        }
                }
                for(i = 0;i < 8;i++)
                {
                        if(cur == True)
                        {
                                line = i;//记录当前皇后列的数字
                                search(line,n+1);
                        }
                }
       
        }


int main()
{
        cout<<"八皇后问题:"<<endl;
        int line = {0};//表示第i行里存放的皇后在第几列
        search(line,0);
        cout<<"八皇后问题共有:"<<count<<"种解法"<<endl;
       
        return 0;
}

sunrise085 发表于 2020-9-20 22:18:26

是你的初始化方式不对。
将数组统一初始化,只对0有效。
你定义一个长度为8 的数组,想直接初始化为全都是1,不能写成 int cur={1},这个写的结果是cur内容为{1,0,0,0,0,0,0,0}
所以你这一行初始化应该写全,int cur = {True,True,True,True,True,True,True,True};

焚海拦江 发表于 2020-9-20 22:19:36

补充一下,是第11行代码(本来想标红结果代码里不能标红)
页: [1]
查看完整版本: 关于递归函数里的数组问题