现有40000个节点,分布在蜂巢晶格中,每个点有3个邻居,需要将它们存储在一个二维数组中,蜂巢晶格中的点的id是如何确定?

豆芽炒粉丝 2016-07-24 05:13:07
加精
蜂巢晶格网络:
每个点的邻居示意图:
...全文
2505 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-03
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
豆芽炒粉丝 2016-08-03
  • 打赏
  • 举报
回复
引用 46 楼 dingchenxixi 的回复:
[quote=引用 43 楼 zhao4zhong1 的回复:]
感谢赵老师的关注哈!我今天编程再试一下,晚辈太愚钝啦![/quote] 按照此图所示的逻辑结构,写出C代码。准备过几天结帖,如果更好的方法请继续留言
豆芽炒粉丝 2016-08-03
  • 打赏
  • 举报
回复
引用 47 楼 theforever 的回复:
我本家的模型和楼主说的意思还是差一点。 楼主说的是每个节点都有3个邻居。 我本家的模型里,显然有相当一部分不满足条件,只有两个甚至只有一个邻居。 正确的模型,应该想一想足球皮。 也就是说,把这个模型想像成覆盖在一个球体表面的闭合网状。那样才能满足条件。 但是又如何满足用二维数组的形式存储呢? 想想地球的经纬度。经纬度可以定义地球表面网状结构任意一点的坐标。 地球上每一点都有无数个邻居,而楼主的这个模型要简单得多了,每一点只有三个邻居,所以,可以建立一个角度固定的经纬度坐标体系。根据这个体系的公式,不仅可以确定坐标的具体值,也可以根据任意一个坐标的值,通过向量坐标计算的方法,向左上方和右上方固定角度以下向下取相同长度,即可计算得出此点的三个邻居的坐标。 把经纬度坐标联合起来作为ID就可以了,可以节省两个数据库字段,所得ID又可确保是唯一的。
对。我按照赵老师的方法将代码已写出。比如说第一个点,他的3个邻居分别是第一行的最后一个,右边的一个,和最后一行的第一个,就像您说的那样,球形,确实如此!!
cqh963852 2016-08-03
  • 打赏
  • 举报
回复
引用 28 楼 zhao4zhong1 的回复:
豁然开朗。
  • 打赏
  • 举报
回复
现在,变成你只需要用一维数组就可以存储和提取这些数据并表示它们之间互相的结构关系了,从ID中你可以分离出(经度,纬度)坐标。根据固定的向量计算公式,得出三个邻居的(经度,纬度)坐标并将它们结合成ID,就能得到三个邻居的点对象。
  • 打赏
  • 举报
回复
我本家的模型和楼主说的意思还是差一点。
楼主说的是每个节点都有3个邻居。
我本家的模型里,显然有相当一部分不满足条件,只有两个甚至只有一个邻居。
正确的模型,应该想一想足球皮。
也就是说,把这个模型想像成覆盖在一个球体表面的闭合网状。那样才能满足条件。
但是又如何满足用二维数组的形式存储呢?
想想地球的经纬度。经纬度可以定义地球表面网状结构任意一点的坐标。
地球上每一点都有无数个邻居,而楼主的这个模型要简单得多了,每一点只有三个邻居,所以,可以建立一个角度固定的经纬度坐标体系。根据这个体系的公式,不仅可以确定坐标的具体值,也可以根据任意一个坐标的值,通过向量坐标计算的方法,向左上方和右上方固定角度以下向下取相同长度,即可计算得出此点的三个邻居的坐标。
把经纬度坐标联合起来作为ID就可以了,可以节省两个数据库字段,所得ID又可确保是唯一的。
豆芽炒粉丝 2016-07-31
  • 打赏
  • 举报
回复
引用 43 楼 zhao4zhong1 的回复:
感谢赵老师的关注哈!我今天编程再试一下,晚辈太愚钝啦!
豆芽炒粉丝 2016-07-31
  • 打赏
  • 举报
回复
引用 44 楼 DelphiGuy 的回复:
老赵的方法是可以的,没必要非要把节点ID用一维数组表示,也可以用二维数组嘛。 至于求邻居节点,那也很容易: 就用老赵那个表示方法,假设对应位置有节点则该元素是1,没节点则是0,比如[0, 0]那个位置。 对给定的节点坐标ID[x, y],先检测坐标有效性,诸如是否超出坐标范围,该位置有没有节点等, 如果x+y=偶数,则它的邻居是[x, y-1], [x-1, y], [x+1, y] 如果x+y=奇数,则它的邻居是[x, y+1], [x-1, y], [x+1, y] 检测邻居的有效性
我今天再编程试一下,谢谢您。
豆芽炒粉丝 2016-07-30
  • 打赏
  • 举报
回复
引用 41 楼 lkplyl 的回复:
[quote=引用 35 楼 ljheee 的回复:] [quote=引用 33 楼 zhao4zhong1 的回复:] [quote=引用 32 楼 dingchenxixi 的回复:] [quote=引用 28 楼 zhao4zhong1 的回复:]
老师,谢谢您给的提示。[/quote] 我一般不会指错路的。[/quote] 老师 好厉害。。貌似就看懂这个[/quote] 感觉还需要补充一下: 例如(3,3)周围三个点的坐标是{(2,3),(3,2),(3,4)},{(3,2),(3,4)}这两个点比较容易得出,但是不看图的话如何判断出另一个点是(2,3)还是(4,3)? 根据图形规则,没行的点其实有的是向上有的是向下,如果加上向上或者向下标识的话就能比较容易的获取第三个点的位置。 例如(上,3,3),他周围的三个点必然是{(下,2,3),(下,3,2),(下,3,4)}[/quote] 如果用数组这种方法的话 对我帮助有限。举例:我需要通过id为25的节点,就能得到他的3个邻居,比如说player[24][0]是它的第一个邻居的id,player[24][1]是第二个邻居,player[24][2]为第三个邻居。如果用数组的话,操作方面并没有方便。觉着还是应该找规律
  • 打赏
  • 举报
回复
老赵的方法是可以的,没必要非要把节点ID用一维数组表示,也可以用二维数组嘛。 至于求邻居节点,那也很容易: 就用老赵那个表示方法,假设对应位置有节点则该元素是1,没节点则是0,比如[0, 0]那个位置。 对给定的节点坐标ID[x, y],先检测坐标有效性,诸如是否超出坐标范围,该位置有没有节点等, 如果x+y=偶数,则它的邻居是[x, y-1], [x-1, y], [x+1, y] 如果x+y=奇数,则它的邻居是[x, y+1], [x-1, y], [x+1, y] 检测邻居的有效性
赵4老师 2016-07-30
  • 打赏
  • 举报
回复
伊顺鸣 2016-07-29
  • 打赏
  • 举报
回复
伊顺鸣 2016-07-29
  • 打赏
  • 举报
回复
来支持冷额。。。
lkplyl 2016-07-29
  • 打赏
  • 举报
回复
引用 35 楼 ljheee 的回复:
[quote=引用 33 楼 zhao4zhong1 的回复:] [quote=引用 32 楼 dingchenxixi 的回复:] [quote=引用 28 楼 zhao4zhong1 的回复:]
老师,谢谢您给的提示。[/quote] 我一般不会指错路的。[/quote] 老师 好厉害。。貌似就看懂这个[/quote] 感觉还需要补充一下: 例如(3,3)周围三个点的坐标是{(2,3),(3,2),(3,4)},{(3,2),(3,4)}这两个点比较容易得出,但是不看图的话如何判断出另一个点是(2,3)还是(4,3)? 根据图形规则,没行的点其实有的是向上有的是向下,如果加上向上或者向下标识的话就能比较容易的获取第三个点的位置。 例如(上,3,3),他周围的三个点必然是{(下,2,3),(下,3,2),(下,3,4)}
豆芽炒粉丝 2016-07-29
  • 打赏
  • 举报
回复
引用 33 楼 zhao4zhong1 的回复:
[quote=引用 32 楼 dingchenxixi 的回复:] [quote=引用 28 楼 zhao4zhong1 的回复:]
老师,谢谢您给的提示。[/quote] 我一般不会指错路的。[/quote]
引用 34 楼 qq_35728236 的回复:
请问积分怎么搞得
回答问题可以得吧。
qq_35728236 2016-07-28
  • 打赏
  • 举报
回复
请问积分怎么搞得
qq_35724914 2016-07-28
  • 打赏
  • 举报
回复
假设是几何图形的话 第一行A点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) B 点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2) C 点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) D 点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2) E点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) F点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2)
赵4老师 2016-07-28
  • 打赏
  • 举报
回复
引用 32 楼 dingchenxixi 的回复:
[quote=引用 28 楼 zhao4zhong1 的回复:]
老师,谢谢您给的提示。[/quote] 我一般不会指错路的。
豆芽炒粉丝 2016-07-28
  • 打赏
  • 举报
回复
引用 28 楼 zhao4zhong1 的回复:
老师,谢谢您给的提示。
豆芽炒粉丝 2016-07-28
  • 打赏
  • 举报
回复
引用 30 楼 qq_35724914 的回复:
假设是几何图形的话 第一行A点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) B 点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2) C 点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) D 点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2) E点处 (x-1/2, y-sqrt(3)/2),(x-1/2,y+sqrt(3)/2),(x+1,y) F点处 (x-1,y), (x+1/2,y-sqrt(3)/2),(x+1/2,y+sqrt(3)/2)
嗯。示意图是几何图形,我是需要仿真实验,所以几何图形的方法并不适用吧!您觉得呢?
加载更多回复(32)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧