大家都还记得之前的adjacency list吧!这个练习题结合了adjacency list 与 pointer 的概念,我认为是一个很好的练习,不过又不会太复杂,毕竟 pointer 对我来说还是一个非常似是而非的观念。
我们今天要制作 adjacency list 的方法是:
如下图:
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 开始
前言 今天要来实作 Communicate Between Containers in the Sa...
前面的检视团购讯息,检视团购讯息用文字不好检视 这边计画用matplotlib的pyplot将资讯输...
在正式开始写程序前,还有几点要告诉大家。 所有的 Java 变数在可以使用前,都必须宣告他的名字(n...
前言 前几天我们聊的是串接API,在前端功能开发里,遇到的第二个主题就是档案处理。 档案处理也是在网...
需求 在早前几篇文章,我们介绍了 Recoil 这个 library 来在整个 App 分享全域变数...