总所周知
俄罗斯方块是通过4个正方形组成7个不同的图形来进行的游戏那么依据同样的生成图形的规则
5个正方形可以生成多少个图形
6个呢?
7
...
n个呢
能够推出来
以及通过编程实现
在编程方面
因为考虑到图形的旋转
感觉比较有难度

解决方案 »

  1.   

    有深度。先占个座。thinking。。
      

  2.   

    http://blog.csdn.net/qiuchengw/archive/2008/12/03/3439941.aspx
    这是我之前写的俄罗斯方块的生成物块图形算法,不知道对你有没有帮助,
    我的想法是根本不需要记录,也不需要穷举,看下代码你应该能好理解点。
      

  3.   


    恩 生成方块可以用这种思想 也就是一步一步的构造的思想 第一个不用说 第2个 在前面的图形的周围
    加上 有点类似递归的思想 可以解决游戏中的问题但问题来了 LZ不是要做游戏 LZ是想知道有多少种不同的图形 他们是什么 这个就比较难了
      

  4.   

    假设是图类算法 每个节点都有最多有4条边up douw left right  假设有 A B C D 是个节点
    C--A--B
       |
       D
    大家发现没有 每个节点 都不能和 他的相邻节点所相连的节点 相连 也就是 C不能和 A周围的CBD相连
    这就产生了个很难的图的同构问题 
    这样做很困难 希望能看到牛人的简单方法
      

  5.   

    继续顶!!!!!!!!!!!!!
    期待ing
      

  6.   

    继续顶!!!!!!!!!!!!!
    期待ing
      

  7.   

    http://blog.csdn.net/dujingjing1230/archive/2009/10/27/4734741.aspx
    看看设计这个游戏的人的思想吧。这里有在wiki上的链接。
      

  8.   

    其实,这个问题等价于 饱和烷烃CnH2n+2有多少种同分异构体
    http://topic.csdn.net/t/20020615/13/805637.html
      

  9.   

    可行的算法框架:有兴趣可以看看 Gspan 算法在 google里面搜1.将形状假想成图:小正方形视作顶点,正方形邻结关系视作边(一个顶点最大度为4)深度优先遍历,对遍历序进行三元组编码<formnode direction tonode>
    ■ ■ ■ ■四个正方形组成的条形可编为:A=<1 r 2><2 r 3><3 r 4> 还可以编码为:B=<1 l 2><1 r 3><3 r 4>■ ■
    ■ ■ 四个正方形组成的正方形可编为<1 r 2><2 d3 ><3 l 4>■ ■ ■
      ■   倒T形可编为<1 r 2><2 r 3><2 d 4>
    2.图同构检测与最小编码
    方向序:r<u<l<d
    遍历结点先后序M=<a,b> N=<c,d> M≠N
    if(a<c) M<N
      else if(a=c)
           if(b<d)M<N else 即formnode第一比较序,tonode第二节点序
    三元组序:取遍历结点先后序为第一比较序,方向序为第二比较序
    编码序:类似于字符串的比较,A={a1,a2,...an}B={b1,b2...bn} A<B if exist i,a1=b1,a2=b2...ai=bi,ai+1<bi+1 例如对条形的扩展,<1 r 2> 小于<1 l 2>,所以两种编码A<B
      如何检测两个图是不是一样?比较它们的最小编码是不是相等
    如何获得一个图的最小编码:从任意节点进行扩展,扩展所有可能的方向,得到一系列的编码,总有一个是最小的,利用早期中断加速。
    2.采用树形结构,第n层存储由n个正方形组成的图形,第一层1个,第二层2个,第三层3个,第四层5个……
    3.从第n层到第n+1层的扩展方法:
        从任意方向上进去扩展:但是要注意扩展的合理性,注意不能使度超过4,不能重复边 例如有了<1 r 2>就不能再有<2 l 3>
       对新扩展的图进行最小编码,然后去掉那些相同的图,同时还要保持树形结构
     例如:■ ■有六种可行的扩展方法,但是不重复的只有两种
    ■ ■ □  ■ ■
           □
      

  10.   

    http://blog.csdn.net/qiuchengw/archive/2008/12/03/3439941.aspx 
      

  11.   

    http://blog.csdn.net/qiuchengw/archive/2008/12/03/3439941.aspx 
      

  12.   

    一时想不起来了  这个是高数还是高代中的一个关于 结点和对应树的算法。a ---  b --- c ---- d ---- e  a ----b -----c-----d
          |
          e****
    就是这个 具体怎么算真想不起来了
      

  13.   

    各位听听我的高见吧。呵呵
    假设有10个方块需要排列,那么我们把这10个方块编个号,分别从1-10.然后构建一个表10X10,并且表格也排序为(1-100).
    1.先放第1个方块,有10X10=100种方法。
    2.在放第2个方块,如果第1个方块在表格最中间,则第2个方块要靠近第1个方块,就只有4种方法(四个面啥)。
    3.在放第3个方块,要靠近第2个方块,现在第2方块剩下的面就只有3了。
    4.在放第4个方块,要靠近第3个方块,第3个方块也最多3个面啥。
    5...(以此类推)
    最后的算法复杂度(N*N)*(4)*3*3*3*3*3*3*3*3=26244N*N
    当然这个结果里面包含重复了的,这个好办.比如2个方块的序号分别是
    1.  1,2,3,4,5,6,7,8,9,10(共10个方块)
    2.  1,2,3,4,6,5,7,8,9,10
    我们可以运行到6VS5的时候判断2方块不同,呵呵
    是不是问题解决了?期待更好的算法 (过2天我会发布这个算法的程序)