数组的妙用

二维数组的本质上仍然为一段连续的线性空间,和一维数组相同,根据下标进行访问时,仍然是常数时间。

  • 有些看似是二维的形式,其实稍作思考,还是一维的,只是为了展示的方便,

    • 比如 4*4 的 16 个时钟,它们各自指向不同的时刻,我们的工作是让其做到时钟同步,因此一个一维数组(向量,vector<int> clocks;),轻松解决问题;
  • 二维的二值图像显然需要使用二维数组进行存储;

0. 基础

  • 二维数组,可以用来刻画图中结点和边的关系,也即图的邻接矩阵法;
  • 二维布尔数组(值只取 0/1),用来刻画结点之间是否存在某种定性的关系;

    bool areFriends[10][10];
                            // 10 人之间的朋友关系,显然是对称的
  • 旅行商问题:两城市间的距离

    double dist[MAX][MAX];

1. 高级

4*4 一共 16 个时钟,时钟上的时间各不相同,现在要通过操做 10 个开关,使其时间一致。已知,开关对时钟的控制关系如下:

  • 0:0、1、2;
  • 1:3、7、9、11
  • 2:4、10、14、15;
  • 3:0、4、5、6、7
  • 4:6、7、8、10、12;
  • 5:0、2、14、15
  • 6:3、14、15;
  • 7:4、5、7、14、15
  • 8:1、2、3、4、5;
  • 9:3、4、5、9、13

也即此时,开关对时钟的控制,长度也是不一的。但,时钟的数目是固定的,开关的数目也是固定的:

const int SWITCHES = 10, CLOCKS = 16;
const char linked[SWITCHES][CLOCKS] = {
    "xxx.............",
    "...x...x.x.x.....",
    ....
    "...xxx...x...x.."
}
                                            // 当然也可以使用 0/1 存储为布尔类型
posted on 2016-09-05 08:47  未雨愁眸  阅读(265)  评论(0编辑  收藏  举报