所以,我正在做一个数独游戏,每个正方形将指向其行,列和3x 3 '区域'中的每一个其他正方形。在sudoku
构造函数中,我连接相关的正方形。行和列连接没有给予我任何意外的结果-有1296个连接要做,当这部分完成时,打印出来的count
显示的是1296,太好了!
现在,当对3x 3区域执行相同操作时,我遇到了一个问题。当使用option 2
时,count
在324处结束,当打印电路板时,我得到了所需的结果。然而,当将get_node
函数的结果存储在临时变量中时,(option1
),我得到648,每个正方形的连接数是正确的(16而不是20)。这不应该是这样的,因为所有的get_node
函数做的是return _board[(I * dim) + J]
。有人知道这样的问题可能来自哪里吗?
提前感谢!
P.S.是的,我暂时禁用了编译器警告,这样goto
语句就可以编译了--这不是问题所在,这只是为了让这里的人更清楚地看到:)
// areas
int count(0);
for (int a = 0; a < 3; ++a) {
for (int b = 0; b < 3; ++b) {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
for (int m = 0; m < 3; ++m) {
for (int n = 0; n < 3; ++n) {
if (i == m && j == n) continue;
goto option1;
//------------------------
option1:
{
auto current_node = get_node(a*3 + i, b*3 + j);
auto potential_connection = get_node(a*3 + m, b*3 + n);
if (ISINSIDE(current_node.get_connections(), &potential_connection)) continue;
current_node.add_connection(&potential_connection);
goto end;
}
//------------------------
option2:
{
if (ISINSIDE(get_node(a*3 + i, b*3 + j).get_connections(), &get_node(a*3 + m, b*3 + n))) continue;
get_node(a*3 + i, b*3 + j).add_connection(&get_node(a*3 + m, b*3 + n));
goto end;
}
//------------------------
end:
count += 1;
std::cout << count << '\n';
}
}
}
}
}
}
字符串
1条答案
按热度按时间7dl7o3gd1#
密码不一样。
&get_node(a*3 + m, b*3 + n)
是&_board[idx]
,某个数组元素的地址。&potential_connection
不是数组元素的地址,这是一个完全不同的地址,局部变量auto potential_connection = ...
的地址这应该能解决问题
字符串