你的程序好像是对的。
成都创新互联公司从2013年创立,先为桦川等服务建站,桦川等地企业,进行企业商务咨询服务。为桦川企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
#include iostream
using namespace std;
int n, half;
int ans; // 目标计数
int count; // 当前+号个数
int p[25][25]; // 当前三角形符号,1-based,0:+,1:-
void dfs(int t)
{
if (t n)
ans++;
else
{
for (int i = 0; i 2; i++) {
p[1][t] = i;
if (!i)
count++;
for (int j = 2; j = t; j++) {
p[j][t - j + 1] = p[j - 1][t - j + 1] ^ p[j - 1][t - j + 2];
if (!p[j][t - j + 1])
count++;
}
if (count = half t * (t + 1) / 2 - count = half)
dfs(t + 1);
for (int j = 1; j = t; j++)
if (!p[j][t - j + 1])
count--;
}
}
}
int Compute(int i)
{
if (i * (i + 1) / 2 % 2 == 1)
return 0;
n = i;
half = i * (i + 1) / 2 / 2;
ans = 0;
count = 0;
dfs(1);
return ans;
}
int main()
{
for (int i = 1; i = 24; i++) {
cout Compute(i) ", ";
if (i % 4 == 0)
cout endl;
}
return 0;
}
重复输出是因为
for(int
i
=
0;
i
n;
i
++)
dfs(0,i);
由于在dfs内部,已经对当前行进行过遍历,在主函数只需用调用一次dfs(0,0)即可
而当5的时候,为什么会出错,具体原因不清楚
但根据调试发现,无法处理对角线间隔多行的情况,特别是第二个输出就错了,问题在往上返回的过程中,左下角位置本来是-1,变成了0,这种情况应该是在恢复地图时错误
这个没有固定的形式
根据具体的情况来写
关键是思想
bfs是先扩展节点再增加深度
dfs是先增加深度,到底后返回再扩展节点
一个是使用大量空间 另一个则是遍历所有路径,相对的更费时间
函数需要返回什么值就返回什么呗,返回int就写int,没有返回就写void。
表示引用,传引用不需要拷贝构造函数等等复杂的操作,效率更高。如果
没有对树做更改,最好加一个const修饰符,这样可以阻止对树的更改。