螺旋矩阵:算法及程序点评.docVIP

  • 4
  • 0
  • 约3.58千字
  • 约 6页
  • 2017-12-27 发布于河南
  • 举报
螺旋矩阵:算法及程序点评

螺旋矩阵:算法及程序点评 终于把 libaojian 的程序看完了,是一个遍历边法,并把每四边组织成一个圈。里面有一点涉及数学模型的计算,可惜不是自发的,是因为调用了method,值传不回来,只好计算了。更重要的是由于一个算法上的缺陷,导致其不能依顺序放值,只好计算。 libaojian 的程序在算法上有一个缺陷和一个错误。缺陷是思维级的,而错误是编程技能级的。所以我把它们分开来说了。 一个缺陷是指抽象的时候没有准确地反映问题的实质。螺旋矩阵的每一圈都是有顺序的,先上,至右,再至下,最后是左边。而他只是把四边简单地分成两行两列,把隐含的内在联系弄丢了。结果只好在控制逻辑上弥补,导致控制逻辑过于复杂。 一个错误是指在Vector getvecs(..)内,col1在不同的情况下有双重含义。在row1存在的时候,col1从row1下一行算起。而对于最后的奇数列,row1不存在,col1从第一行算起。这一歧义直接导致Vector转换成Array时,控制逻辑过于复杂。 除了算法缺陷和错误外,程序里有大量冗余的IF,既不出于算法的需求,也不出于控制逻辑的需求,属于逻辑思维不够严密,这在新手身上很常见。总的来说,libaojian 的编程技能有大量提高的空间。 我把程序改写了一下,保留了主要算法,修改了错误和简化了控制逻辑。希望对 libaojian 有所帮助。 import java.util.*; public class test { //Main method public static void main(String[] args) { int row = Integer.parseInt(args[0]); int col = Integer.parseInt(args[1]); int count = row*col; int mintemp = 1; int rowtemp = row; int coltemp = col; Vector allvec = new Vector(); while (mintemp = count) { Vector vec = getvecs(mintemp, rowtemp, coltemp); allvec.add(vec); mintemp = mintemp + coltemp - 1 + rowtemp - 1 + coltemp - 1 + rowtemp - 1; rowtemp = rowtemp - 2; coltemp = coltemp - 2; } String[][] all = new String[row+1][col+1]; int minrow = 1; int maxrow = row; int mincol = 1; int maxcol = col; for (int i=0;iallvec.size();i++) { Vector vec = (Vector)allvec.elementAt(i); Vector row1 = (Vector)vec.elementAt(0); Vector row2 = (Vector)vec.elementAt(1); Vector col1 = (Vector)vec.elementAt(2); Vector col2 = (Vector)vec.elementAt(3); for (int j=0, tt = 0;jrow1.size();j++, tt++) all[minrow][mincol+tt] = (String)row1.elementAt(j); for (int j=row2.size()-1, tt = 0;j=0;j--, tt++) all[maxrow][mincol+tt] = (String)row2.elementAt(j); for (int j = 0, tt = 1; j col1.size(); j++, tt++) all[minrow+tt][maxcol] = (String)col1.elementAt(j); for (i

文档评论(0)

1亿VIP精品文档

相关文档