如何使用DP绘制具有n种不同颜色的r x r字段,而无需在同一行使用相同的颜色
How to paint r x r field with n different color, without using same color at same line, with DP
我想问一下如何使用DP解决这个问题。
问题是:"制作一个程序来计算有多少种方法用n种不同的颜色绘制r x r字段,而不在同一行和同一列使用相同的颜色。
我试图通过回溯来解决它,但花了这么多时间。 同样使用BFS,它需要很多内存。(而且没那么快。 有人告诉我用算法DLX来解决它,但我认为会有一个更简单的解决方案。
可以用DP解决吗?10 x 10 种颜色的字段应在 1~2 秒内填充。请帮忙!
我不知道DP的解决方案,但还有另一种方法需要遍历矩阵一次,没有任何额外的空间和O(n^2(复杂性(我认为使用DP时也是如此(。
从单元格(0,0(开始,用颜色paint_no绘制它,然后将行和列递增1,但请记住取行%n和col%n,因为在某些时候行或列可能大于"n"。
该解决方案有效,因为当您用颜色绘制框时,下一个框将在下一行和下一列中绘制,依此类推。
starting_cell_row=0;
starting_cell_col=0;
count=0;
for(paint_no, 1, n)
{
count=0;
row=starting_cell_row;
col=starting_cell_col;
while(count<n)
{
matrix[row][col]=paint_no;
row=(row+1)%n;
col=(col+1)%n;
count++;
}
starting_cell_col++;
}
查找拉丁方块的数量是一项众所周知的任务 https://en.wikipedia.org/wiki/Latin_square
该任务没有通用的解决方案。
但是对于计算查找所有排列,存在雅各布森和马修斯算法。
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 从C++dll访问C#中的一行主要参数
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 在C++中,我如何接受不同于同一行的用户输入
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从一行中读取特定数量的字符?(C++)
- 如何从SDL_Surface获取特定像素的颜色
- 读取最后一行代码算法 - c++ 时出现问题
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在一行中填充矢量图
- 需要将一行代码从C++ Qt翻译成PyQt
- 为什么如果我添加这一行,我的程序会不断询问值
- 列表视图更改选择颜色
- 如何使用DP绘制具有n种不同颜色的r x r字段,而无需在同一行使用相同的颜色
- 给定尺寸为 26 * 7 的图像是否有可能在垫子的每一行中包含 78 个单独的颜色值,而另一个可以包含 77
- 如何在每一行数组C++中进行颜色更改
- 8bpp BMP -将像素引用到颜色表;想要只读取一行像素;c++