关于排序编码问题(实际工作中遇到的)

demo. class 2020-10-20 11:23:17

各位java大佬们好!本人在工作中有一个excel业务模块处理,
要求就是看到图片中的1,从1开始进行排序,而且需要首尾相接,意思就是标号1(就是起点)已经定好,排序2标号的一定要在和1最近的位置(图中方框为所需要编排的区域),排到第4坐标的位置要在3的下两格,以此类推。
本人根据Dijkstra算法进行扩展,排序之后达不到工作的要求,如下图所示

有没有大佬看看,应该如何去编排,请求指教指教!!!
...全文
4111 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
王瑞恒 2020-10-26
  • 打赏
  • 举报
回复
有偿,我帮你写
王瑞恒 2020-10-26
  • 打赏
  • 举报
回复
这个很简单,仔细看excel的规则,从上往下是一个循环,然后每列是一个循环计算差值,然后排列填写数字,每列最后一个为起点,这个思路应该是可行的
demo. class 2020-10-26
  • 打赏
  • 举报
回复
引用 28 楼 王瑞恒的回复:
有偿,我帮你写
下次吧,关注你了
冰思雨 2020-10-23
  • 打赏
  • 举报
回复
用浮点数计算距离,我并不觉得有什么麻烦的。这与使用int存储数据并没有必然联系呀,难道楼主存储的数据是距离吗?如果存储的数据是距离那就当我没说,如果存储的数据是标号,那和距离没必要选择相同的数据类型,因为距离是临时变量,每换一个格子,周围格子的距离都要重新进行计算的,这和迷宫求解中计算路径是同一个思路,都是临时变量。 ”优先进行本行的编排”,这句话又会产生歧义了,是要先排满一排再排下一排,还是,相同距离的情况下,优先选择同一排的进行排布?我觉得是后者,但是,你不能总是用有歧义的话进行问题和事情的描述,不然的话,我们连问题都弄不清楚,就更无法谈及帮你解决问题了。 如果两个难点(1.问题计算 2.递归调用 )都有明确思路了,这个问题也就算是解决了。编程能力不行,应该不在讨论的范畴之内吧。
demo. class 2020-10-23
  • 打赏
  • 举报
回复
引用 24 楼 冰思雨的回复:
用浮点数计算距离,我并不觉得有什么麻烦的。这与使用int存储数据并没有必然联系呀,难道楼主存储的数据是距离吗?如果存储的数据是距离那就当我没说,如果存储的数据是标号,那和距离没必要选择相同的数据类型,因为距离是临时变量,每换一个格子,周围格子的距离都要重新进行计算的,这和迷宫求解中计算路径是同一个思路,都是临时变量。 ”优先进行本行的编排”,这句话又会产生歧义了,是要先排满一排再排下一排,还是,相同距离的情况下,优先选择同一排的进行排布?我觉得是后者,但是,你不能总是用有歧义的话进行问题和事情的描述,不然的话,我们连问题都弄不清楚,就更无法谈及帮你解决问题了。 如果两个难点(1.问题计算 2.递归调用 )都有明确思路了,这个问题也就算是解决了。编程能力不行,应该不在讨论的范畴之内吧。
嗯。十分感谢!已经出来了。编排这块,因为我们领队也没有特别明确的定义,可能领队想让我们做的更加智能一些。
qq_39936465 2020-10-23
  • 打赏
  • 举报
回复
引用 22 楼 Code for 的回复:
[quote=引用 20 楼 冰思雨的回复:]规则表述不明确: 1. 什么叫首尾相连? 如果首理解为标号1,那么,尾是个什么鬼? 标号147吗? 如果首是标号1,尾是标号2的话,按照这个规律,首是标号2,尾是标号3,那么,相连是个什么鬼?2和3之间有空白的格子怎么叫相连? 2. 如果需求是要按照最相邻近的方式将标号由大到小进行排布的话,最相邻进的标准是什么? 比如:A、标号1与2中间没有空白格子的情况,1与2的距离是0还是1? B、标号2与3之间横向有一个空白格子,2与3的距离是1还是2? C、标号2与5之间(或者2与6之间)是斜方向存在一个空白格子,这个距离是1还是2还是 根号2 ? 距离的标准没有确定,无法实现最相邻进的排布。 3. 如果不考虑斜方向的距离进行排布,只考虑横竖两个方向的话,算法会简单很多。 这个排布算法的核心难点就两个,一个是距离计算、另一个是递归调用(当然,不用递归也能实现)。
首尾相连,就是数字排序要相连。比如1,要找2的话,要在1的周围找,排3的话要在2的周围找,但是要优先进行本行的编排。回答A问题,距离是1。回答B问题,距离是2,C问题,距离是选择下一个格子的权重,本人用int存储数据,计算斜率的话需要double存储,还要维护小数点运算的正确,有点麻烦。所以我是这样的,y轴距离之差+x轴距离之差。[/quote] 我觉首尾相连这个很容易实现,直接用链表就可以实现排序。
weixin_42042362 2020-10-22
  • 打赏
  • 举报
回复
意思是不是已经确定了1,之后的格子需要找1的四方向路径最近的来标识为2,这个就要自己设置四方向查找的权重,比如出现3的上面下面左面都有格子怎么分配权重。重复这个寻路操作就可以了。如果你一定要找到使用最短路径寻到并编号所有格子的办法,那么可以把整个大格子分配成九宫格,然后九宫格内在分配九宫格,根据每个宫内的格子数分配权重。
冰思雨 2020-10-22
  • 打赏
  • 举报
回复
规则表述不明确: 1. 什么叫首尾相连? 如果首理解为标号1,那么,尾是个什么鬼? 标号147吗? 如果首是标号1,尾是标号2的话,按照这个规律,首是标号2,尾是标号3,那么,相连是个什么鬼?2和3之间有空白的格子怎么叫相连? 2. 如果需求是要按照最相邻近的方式将标号由大到小进行排布的话,最相邻进的标准是什么? 比如:A、标号1与2中间没有空白格子的情况,1与2的距离是0还是1? B、标号2与3之间横向有一个空白格子,2与3的距离是1还是2? C、标号2与5之间(或者2与6之间)是斜方向存在一个空白格子,这个距离是1还是2还是 根号2 ? 距离的标准没有确定,无法实现最相邻进的排布。 3. 如果不考虑斜方向的距离进行排布,只考虑横竖两个方向的话,算法会简单很多。 这个排布算法的核心难点就两个,一个是距离计算、另一个是递归调用(当然,不用递归也能实现)。
demo. class 2020-10-22
  • 打赏
  • 举报
回复
引用 21 楼 weixin_42042362的回复:
意思是不是已经确定了1,之后的格子需要找1的四方向路径最近的来标识为2,这个就要自己设置四方向查找的权重,比如出现3的上面下面左面都有格子怎么分配权重。重复这个寻路操作就可以了。如果你一定要找到使用最短路径寻到并编号所有格子的办法,那么可以把整个大格子分配成九宫格,然后九宫格内在分配九宫格,根据每个宫内的格子数分配权重。
最先我的想法和你非常一致。但是实际情况中,比如一个格子是孤立的,外围一层二层甚至五层都没有数据。这个如何处理?
demo. class 2020-10-22
  • 打赏
  • 举报
回复
引用 20 楼 冰思雨的回复:
规则表述不明确: 1. 什么叫首尾相连? 如果首理解为标号1,那么,尾是个什么鬼? 标号147吗? 如果首是标号1,尾是标号2的话,按照这个规律,首是标号2,尾是标号3,那么,相连是个什么鬼?2和3之间有空白的格子怎么叫相连? 2. 如果需求是要按照最相邻近的方式将标号由大到小进行排布的话,最相邻进的标准是什么? 比如:A、标号1与2中间没有空白格子的情况,1与2的距离是0还是1? B、标号2与3之间横向有一个空白格子,2与3的距离是1还是2? C、标号2与5之间(或者2与6之间)是斜方向存在一个空白格子,这个距离是1还是2还是 根号2 ? 距离的标准没有确定,无法实现最相邻进的排布。 3. 如果不考虑斜方向的距离进行排布,只考虑横竖两个方向的话,算法会简单很多。 这个排布算法的核心难点就两个,一个是距离计算、另一个是递归调用(当然,不用递归也能实现)。
首尾相连,就是数字排序要相连。比如1,要找2的话,要在1的周围找,排3的话要在2的周围找,但是要优先进行本行的编排。回答A问题,距离是1。回答B问题,距离是2,C问题,距离是选择下一个格子的权重,本人用int存储数据,计算斜率的话需要double存储,还要维护小数点运算的正确,有点麻烦。所以我是这样的,y轴距离之差+x轴距离之差。
黄同学teen 2020-10-21
  • 打赏
  • 举报
回复
貌似很复杂啊!
weixin_50923107 2020-10-21
  • 打赏
  • 举报
回复
如何要求最近位置6这里不是最近的了吧 而且规则的标准制定的太草率了
  • 打赏
  • 举报
回复
这个序号的生成和连续性没有很明显的规律,至少我没有看出来,这种要先看出来规律才能做开发
  • 打赏
  • 举报
回复
看起来很复杂,我居然没看懂规则
nayi_224 2020-10-21
  • 打赏
  • 举报
回复
41-44的距离要比41-42的近,你这个最近是以什么为标准?而且不管什么规则也都是一个二维数组遍历的问题,怎么连算法算法搞出来了?
惊喜不断 2020-10-21
  • 打赏
  • 举报
回复
一般常用,什么二叉树,三叉树。。。等等。 你这个什么规律展示?
惊喜不断 2020-10-21
  • 打赏
  • 举报
回复
没看出什么规律。。具体要做什么??
demo. class 2020-10-21
  • 打赏
  • 举报
回复
引用 18 楼 长江水面写日记的回复:
[quote=引用 16 楼 Code for 的回复:][quote=引用 12 楼 长江水面写日记的回复:]规则最好说清楚一些,16离6近,6的下一个是跟6一行的很远的7,这个得说清楚些
我明白你的意思,可能我表述不太明白,编码要先保证一行的格子排序。但是有一种情况下可以考虑跳过本行进入下一行排序。就是一行中两格相距特别远,我和我同事一致认为大于十个格子就不考虑本行直接进入下一行。[/quote]跳过本行,直接下一行,本行遗留的想过吗[/quote] 这个我用一个list集合来维护,没有分配的全部记录在一个集合里,
  • 打赏
  • 举报
回复
引用 16 楼 Code for 的回复:
[quote=引用 12 楼 长江水面写日记的回复:]规则最好说清楚一些,16离6近,6的下一个是跟6一行的很远的7,这个得说清楚些
我明白你的意思,可能我表述不太明白,编码要先保证一行的格子排序。但是有一种情况下可以考虑跳过本行进入下一行排序。就是一行中两格相距特别远,我和我同事一致认为大于十个格子就不考虑本行直接进入下一行。[/quote]跳过本行,直接下一行,本行遗留的想过吗
demo. class 2020-10-21
  • 打赏
  • 举报
回复
引用 14 楼 王瑞恒的回复:
这个简单吧,其实就是很简单的算法就可以实现
我觉得也很简单。
加载更多回复(9)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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