首页 / JAVA / JAVA-如何在网格中编码节点邻居?
JAVA-如何在网格中编码节点邻居?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA-如何在网格中编码节点邻居?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1702字,纯文字阅读大概需要3分钟。
内容图文
![JAVA-如何在网格中编码节点邻居?](/upload/InfoBanner/zyjiaocheng/688/e59f8a3a0f7145f3ae125324af56becc.jpg)
我是编程新手,作为一项学校任务,我需要用Java实现BFS,DFS和A *搜索算法,以便从给定大小,4×4、8×8等的Grid中的给定起始位置搜索给定目标.
首先,我不知道如何编码所有节点的邻居.例如,在8×8网格中,图块1的邻居为2和9,而图块12的邻居为4、11、13和20,但我一直在努力进行编码.我需要邻居部分,以便可以通过在邻居之间水平或垂直移动来合法地从网格的其他位置开始移动.
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
我的节点类是:
class Node {
int value;
LinkedList<Node> neighbors;
bool expanded;
}
假设我给了一个8×8网格,所以,如果我以8×8网格的形式启动程序:
1-我的主要方法将创建节点的arrayList例如node
ArrayList<Node> test = new ArrayList<Node>();
然后使用for循环为arrayList中的所有节点从1到64分配值(如果网格大小为8×8).
但是我需要添加每个节点的邻居,如果有人可以给我一些细节,我将非常感激.
解决方法:
假设您的节点布置在M行N列中.为简单起见,令nodes [r] [c]为行r和列c处的Node的引用(基于零的索引),当前具有空的List< Node>.我们要建立的邻居.
这是构建它们的一种方法:
for (int r = 0; r < M; r++) {
for (int c = 0; c < N; c++) {
Node n = nodes[r][c];
List<Node> neighbors = n.neighbors;
if (r > 0) { // has north
neighbors.add(nodes[r-1][c]);
}
if (r < M - 1) { // has south
neighbors.add(nodes[r+1][c]);
}
if (c > 0) { // has west
neighbors.add(nodes[r][c-1]);
}
if (c < N - 1) { // has east
neighbors.add(nodes[r][c+1]);
}
}
}
my
main
method will create anArrayList<Node>
在二维数据结构中处理网格要容易得多,无论是数组数组还是列表列表.如果您坚持要拥有一维列表,那么可以代替node [r] [c]来调用nodeAt(r,c)helper函数:
Node nodeAt(int r, int c) {
return nodesList.get(r * N + c);
}
这是从2D索引到1D的标准转换(假设row-major order).
内容总结
以上是互联网集市为您收集整理的JAVA-如何在网格中编码节点邻居?全部内容,希望文章能够帮你解决JAVA-如何在网格中编码节点邻居?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。