【Day 24】Pointer - Practice 1

大家都还记得之前的adjacency list吧!这个练习题结合了adjacency list 与 pointer 的概念,我认为是一个很好的练习,不过又不会太复杂,毕竟 pointer 对我来说还是一个非常似是而非的观念。

我们今天要制作 adjacency list 的方法是:

  1. 先给定有 n 个 nodes,以此来建立长度为 n 的阵列。
  2. 每一项都会配一个动态阵列,其长度为 n。
  3. 每个动态阵列中都存这个 node 与那些 nodes 相邻。

如下图:

Sol
按照以下的程序码,我们的结果可以符合下方输入输出格式:
NODE_CNT_MAX:最多有多少 nodes。
nodeCnt:nodes 总数。
degrees:有多少 nodes 与目前的 node 相邻。
neighbors:与之相邻的 nodes。

inputGraphInfo:将输入进去的资料分别存入阵列中。
printGraph:将每个 node 各自的邻居输出。
releaseMemory:由於动态阵列不会自己删除其记忆体,我们需要写 delete statments



接下来,我们来运用上面的程序码来做延伸,
若输出输入格式要符合以下:

例如:

不直接印出与其相邻的 nodes,而是只要相邻的话就存成 1,若与这个 node 不相邻就存成 0,并将整个 neighbors 阵列都印出来。

Sol
这边我只对printGraph这个函数作改变,新增一个二维阵列adjacencyMatrix,其长度为nodeCnt,并将其各项初始化为v0,接下来运用 for 回圈判断,只要有相邻的点就改为 1。

Pseudocode

printGraph:
	// 建adjacencyMatrix,并将其各项皆初始化为0
	for i in range 0 ~ nodeCnt {
		for j in range 0 ~ degrees[i] {
			if (0 <= neighbors[i][j] < nodeCnt) {
				adjacencyMatrix[i][neighbors[i][j]] = 1;
			}
		}
	}
	// 按题目要求输出
	for i in range 0 ~ nodeCnt {
		for j in range 0 ~ nodeCnt {
			if (j == nodeCnt - 1) {
				cout << adjacencyMatrix[i][j];
			}
			else {
				cout << adjacencyMatrix[i][j] << " ";
			}
		}
		if (i != nodeCnt - 1) {
			cout << "\n";
		}
	}

<<:  [Day - 21] - 规律的一天从Spring Scheduled 开始

>>:  失误的修补智慧

DAY 24 优化检视团购讯息

前面的检视团购讯息,检视团购讯息用文字不好检视 这边计画用matplotlib的pyplot将资讯输...

[Day03] CH02:告诉我你是谁——变数的宣告

在正式开始写程序前,还有几点要告诉大家。 所有的 Java 变数在可以使用前,都必须宣告他的名字(n...

DAY11 - 前端网页怎麽处理档案?

前言 前几天我们聊的是串接API,在前端功能开发里,遇到的第二个主题就是档案处理。 档案处理也是在网...

不用Recoil的话,如何自己制作一个 Custom hook 来共享全域变数?

需求 在早前几篇文章,我们介绍了 Recoil 这个 library 来在整个 App 分享全域变数...