|
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;
- [color=Red] int cur[8] = {True};//当前行状态 [/color]
- 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;
- }
复制代码
是你的初始化方式不对。
将数组统一初始化,只对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};
|