鱼C论坛

 找回密码
 立即注册
查看: 1306|回复: 2

[已解决]关于递归函数里的数组问题

[复制链接]
发表于 2020-9-20 22:18:25 | 显示全部楼层 |阅读模式
20鱼币
想知道int cur[8] = {True}这一句为什么到递归调用的时候就不能被初始化为True了?
#include <iostream>
#define True 1
#define False 0

using namespace std;
int count = 0;

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


int main()
{
        cout<<"八皇后问题:"<<endl;
        int line[8] = {0};//表示第i行里存放的皇后在第几列 
        search(line,0);
        cout<<"八皇后问题共有:"<<count<<"种解法"<<endl;
        
        return 0; 
}
最佳答案
2020-9-20 22:18:26
是你的初始化方式不对。
将数组统一初始化,只对0有效。
你定义一个长度为8 的数组,想直接初始化为全都是1,不能写成 int cur[8]={1},这个写的结果是cur内容为{1,0,0,0,0,0,0,0}
所以你这一行初始化应该写全,int cur[8] = {True,True,True,True,True,True,True,True};

最佳答案

查看完整内容

是你的初始化方式不对。 将数组统一初始化,只对0有效。 你定义一个长度为8 的数组,想直接初始化为全都是1,不能写成 int cur[8]={1},这个写的结果是cur内容为{1,0,0,0,0,0,0,0} 所以你这一行初始化应该写全,int cur[8] = {True,True,True,True,True,True,True,True};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-20 22:18:26 | 显示全部楼层    本楼为最佳答案   
是你的初始化方式不对。
将数组统一初始化,只对0有效。
你定义一个长度为8 的数组,想直接初始化为全都是1,不能写成 int cur[8]={1},这个写的结果是cur内容为{1,0,0,0,0,0,0,0}
所以你这一行初始化应该写全,int cur[8] = {True,True,True,True,True,True,True,True};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-20 22:19:36 | 显示全部楼层
补充一下,是第11行代码(本来想标红结果代码里不能标红)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表