数组数据排列的问题

myqoo 2009-01-01 11:31:00
遇到个程序,可以抽象成个这么个问题:
往一个13*8的数组(默认值都为0)里随机添加1,2,3三种数字,不必全放满,但相同数字横方向或竖方向最多只能有两个相邻,比如下面的样子:

0 0 1 1 0
0 2 0 0 0
0 2 0 0 0
0 0 0 3 3

但不允许这个样子:

0 0 1 1 1
0 2 0 0 0
0 2 0 0 0
0 2 3 3 3

请问有没有比较好的算法?
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq675927952 2009-01-04
  • 打赏
  • 举报
回复
不懂,学习!
绿色夹克衫 2009-01-04
  • 打赏
  • 举报
回复
恩.2楼的方法很好,顶一个!

lz是要解决数独问题么?
  • 打赏
  • 举报
回复
mark,
tailzhou 2009-01-02
  • 打赏
  • 举报
回复
你这个题目比八皇后问题要简单;可以有很高效的解法;

首先改变一下题目的描述:
"往一个13*8的数组,里随机添加0(相当于不填写),1,2,3四种数字,必须全放满,但相同数字(除0外)横方向或竖方向最多只能有两个相邻."
可以看到,重新描述后的题目跟原命题是一样的;

我们按照先上后下,先左后右的次序来添加数字;
假设当前需要填的位置为[i,j],由于能填写的数字只受到已填写的横方向([i,j-1],[i,j-2])或竖方向([i-1,j],[i-2,j])两个限制,所以最多只有1,2,3之中的2个数字不能填写,所以总能填写当前位置;
也就是不象八皇后问题那样需要回溯;
从当前位置能填写的数字中(包含0,填0相当于不填写),随机挑选(可以使用随即数的算法选一个)一个填上即可;
「已注销」 2009-01-02
  • 打赏
  • 举报
回复
LZ可以参考八皇后问题来做啊,

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧