文档章节

sgu 249

m2012
 m2012
发布于 2012/05/14 23:23
字数 371
阅读 42
收藏 0

在知道格雷码的递归生成算法的前提下,这题就不难了。

格雷码的递归生成算法 =>   http://my.oschina.net/mustang/blog/57392

 

#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;

template <class VVType, class T>
void make2DVector(VVType & a, int d, int f, const T & initValue) {
    int i, j;
    a.resize(d);
    for (i = 0; i < d; ++i) {
        a[i].resize(f);
        for (j = 0; j < f; ++j) a[i][j] = initValue;
    }
}



template <class VVType>
void doubleSizeH(int rowNum, int colNum, VVType & src, VVType & dest) {
  int a, b, c, d, x, s0, s1;

  b = 0; d = 0;
  while(1) {

    if (b >= colNum) break;

    a = 0;
    c = 0;
    s0 = 0;
    s1 = 1;

    while(1) {
      if (a >= rowNum) break;
      int x = src[a][b];
      dest[c][d] = x * 2 + s0;
      dest[c + 1][d] = x * 2 + s1;

      a += 1;
      c += 2;
      swap(s0, s1);
    }

    b += 1;
    d += 1;

  }

}

template <class VVType>
void doubleSizeW(int rowNum, int colNum, VVType & src, VVType & dest) {
  int a, b, c, d, x, s0, s1;

  a = 0; c = 0;
  while(1) {

    if ( a >= rowNum) break;

    b = 0;
    d = 0;
    s0 = 0;
    s1 = 1;

    while(1) {
      if (b >= colNum) break;
      int x = src[a][b];
      dest[c][d] = x * 2 + s0;
      dest[c][d + 1] = x * 2 + s1;

      b += 1;
      d += 2;
      swap(s0, s1);
    }

    a += 1;
    c += 1;
  }

}

int N, M;
vector< vector<int> > W[2];


void input() {
  scanf("%d %d", &N, &M);
  make2DVector(W[0], 1 << N, 1 << M, 0);
  make2DVector(W[1], 1 << N, 1 << M, 0);
}

void run() {
  input();
  int curRowNum = 1;
  int curColNum = 1;
  int k = 0;
  W[0][0][0] = 0;
  int i, j;

  for (i = 0; i < N; ++i) {
    doubleSizeH(curRowNum, curColNum, W[k], W[1-k]);
    k = 1 - k;
    curRowNum *= 2;
  }

  for (i = 0; i < M; ++i) {
    doubleSizeW(curRowNum, curColNum, W[k], W[1-k]);
    k = 1 - k;
    curColNum *= 2;
  }

  int lastRow = (1 << N) - 1;
  int lastCol = (1 << M) - 1;
  for (i = 0; i <= lastRow; ++i) {
    for (j = 0; j <= lastCol; ++ j) {
      if (j == lastCol) printf("%d\n", W[k][i][j]);
      else printf("%d ", W[k][i][j]);
    }
  }
}


int main() {
  run();
  return 0;
}

© 著作权归作者所有

共有 人打赏支持
m2012
粉丝 16
博文 129
码字总数 52548
作品 0
广州
程序员
私信 提问
区块链教程交易所基础开发通过接口查询币种的提币情况qtum

  兄弟连区块链教程交易所基础开发通过接口查询各个币种的提币情况-qtum package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "github.com/l......

兄弟连区块链入门教程
2018/10/09
0
0
区块链教程交易所基础开发通过接口查询各个币种的提币情况-eth

  兄弟连区块链教程交易所基础开发通过接口查询各个币种的提币情况-eth package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "github.com/le......

兄弟连区块链入门教程
2018/10/09
0
0
区块链从入门到精通视频教程查询币种提币情况-ada

  兄弟连区块链从入门到精通视频教程查询币种提币情况-ada 代码如下 package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "github.com/levi......

兄弟连区块链入门教程
2018/10/09
0
0
区块链入门到精通视频教程通过接口查询币种的提币情况-tether

  兄弟连区块链入门到精通视频教程通过接口查询币种的提币情况-tether 代码如下 package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "githu......

兄弟连区块链入门教程
2018/10/09
0
0
区块链教程交易所基础开发通过接口查询币种的提币情况-eos

  兄弟连区块链教程交易所基础开发通过接口查询币种的提币情况-eos: package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "github.com/levi......

兄弟连区块链入门教程
2018/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
4
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部