如何解决如何制作一个布尔数组来保存二维数组中大于 0 的数字的位置?
我正在创建一个解决数独谜题的算法,但其中一个要求是我必须创建一个 bool 数组来锁定任何指定数字的初始位置(在这种情况下,任何不为 0 的数字) ) 这样当算法运行时,它不会改变“锁定”的数字
基本上,下面的数组就是“拼图”本身,我需要创建一个 2D bool 数组来保存最初提供的数字的位置,以便算法在以后运行时无法更改它们
这是拼图本身和数据结构的代码:
#define N 9
typedef struct Coordinates
{
int row;
int column;
};
int sudokuArray[N][N] = {
{0,6,4,0},{7,3,{0,9,1,8,5,3},5},2,{9,0}
};
解决方法
你可以做一些内存效率较低但速度更快的事情:
不是存储值数组,而是存储值结构数组和告诉给定位置是否可变的布尔值。
#include <cstdint>
#include <array>
// Prefer constexpr to macros
constexpr uint32_t size = 9;
struct sudoku_field
{
uint8_t value;
bool is_mutable;
};
std::array<std::array<sudoku_field,size>,size> sudoku_board
{
{ {0,0},{0,{6,1},{4,0} },{ {7,{3,...
}
当您需要测试字段是否应该是可变的时,这种方法将提供恒定的查找时间。
您的方法需要一个位置向量,其中该向量中的每个条目都是不可变的。
#include <vector>
#include <algorithm>
struct coordinates
{
int8_t row;
int8_t column;
};
std::vector<coordinates> immutable_positions;
// And this would be a test funciton
bool is_immutable(int8_t row,int8_t column)
{
auto res = std::find(std::begin(immutable_positions),std::end(immutable_positions),coordinates{row,column});
return res == std::end(immutable_positions);
}
,
您可以执行与 sudoko 拼图完全相同的操作。
另一种选择是以编程方式查找非零数字。
for(int i = 0; i < ROW_SIZE; ++i)
{
for(int j = 0; j < ROW_SIZE; ++j)
{
boolArray[i][j] = (sudokuArray[i][j] > 0);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。