欢迎来到盐山昱通螺旋钢管实体生产企业!

服务热线:

139-0327-6700

销售热线:

0317-5760336

昱通管道

盐山昱通管道

专业生产销售大口径厚壁国标螺旋钢管,厂内加工防腐/保温/涂塑

×
服务热线:

139-0327-6700

新闻中心

您现在的位置:
首页 > 行业资讯 > 企业动态 > 螺旋算法 Spiral algorithm

螺旋算法 Spiral algorithm

日期:2022-05-17

螺旋式优化算法分成内旋和外旋,文中之内旋为例子,如下图

思路一:

复位二维数组,原始元素值是0从正中间挑选一个元素做为起始点1,将选定的元素先后往右边挪动,向下移动,往左边挪动,往上挪动,每移动到一个新元素上,就把计数器的值赋给它假如元素没法开展第2点多的运动了,撤出挪动,打印出数组。

思路二:

复位二维数组,原始元素值是0从正中间挑选一个元素做为中心点1,以中心点为核心,以R=1为的半径旋转,旋转到的元素赋上计数器值,一圈旋转进行,计数器 1,再次旋转的半径所去的元素超过数组范畴时,撤出。打印出数组。

思路一的源代码:

package ** inimport ( "golang.org/x/exp/errors/fmt" "testing")const ** xX, ** xY = 9, 9func TestSpiral(t *testing.T) { x, y := 3, 3 var arr [ ** xX][ ** xY]int arr[x][y] = 1 ok := false for { arr, x, y, ok = moveRight(arr, x, y) print(t, arr) if ok { break } arr, x, y, ok = moveDown(arr, x, y) print(t, arr) if ok { break } arr, x, y, ok = moveLeft(arr, x, y) print(t, arr) if ok { break } arr, x, y, ok = moveUp(arr, x, y) print(t, arr) if ok { break } }}func moveRight(cur [ ** xX][ ** xY]int, x, y int) (newValue [ ** xX][ ** xY]int, newX, newY int, isComplete bool) { value := cur[x][y] for { y value if y <= ** xY { cur[x][y] = value } else { return cur, x, y, true } if cur[x 1][y] == 0 { return cur, x, y, false } }}func moveDown(cur [ ** xX][ ** xY]int, x, y int) (newValue [ ** xX][ ** xY]int, newX, newY int, isComplete bool) { value := cur[x][y] for { x value if x <= ** xX { cur[x][y] = value } else { return cur, x, y, true } if cur[x][y-1] == 0 { return cur, x, y, false } }}func moveLeft(cur [ ** xX][ ** xY]int, x, y int) (newValue [ ** xX][ ** xY]int, newX, newY int, isComplete bool) { value := cur[x][y] for { y-- value if y >= 0 { cur[x][y] = value } else { return cur, x, y, true } if cur[x-1][y] == 0 { return cur, x, y, false } }}func moveUp(cur [ ** xX][ ** xY]int, x, y int) (newValue [ ** xX][ ** xY]int, newX, newY int, isComplete bool) { value := cur[x][y] for { x-- value if x >= 0 { cur[x][y] = value } else { return cur, x, y, true } if cur[x][y 1] == 0 { return cur, x, y, false } }}func print(t *testing.T, cur [ ** xX][ ** xY]int) { fmt.Println("------------------") for _, v := range cur { fmt.Println(v) }}