java算法 蛇形矩阵_算法基础之蛇形矩阵

51cto/2023/10/1 3:20:53

1.[代码][Java]代码

package com.mark.pratice;

import java.util.*;

/**

* Created by markzuo on 15-5-18.

*/

public class SnakeNumber {

private int n;

public SnakeNumber(int n) {

this.n = n;

}

public void print() {

int[][] data = new int[n][n];

data[0][0] = 1;

data[n-1][n-1] = n * n;

//根据蛇形矩阵的特点,分为上下两部分,以斜线为单位计算数据,从1开始编号

//本矩阵将从左至右为开始

//Top:上半部分,负责对角线,斜线数为k,1<=k<=(n-1),对于矩阵阶数n不区分奇偶,k区分

//每条斜线的最小数成递增数列,以1为开始

for (int k = 1; k <= n-1; k++) {

if (k % 2 == 1) { //当k为奇数时,没条线的最小数在上方

data[0][k] = 1 + k * (k + 1)/2;

for (int i = 1; i <= k; i++) { //每条线需要计算k条数据

data[i][k-i] = data[0][k] + i; //行与列之和为k,从上往下计算,列递减

}

} else {//当k为偶数时,没条线的最小数在下方

data[k][0] = 1 + k * (k + 1)/2;

for (int i = 1; i <= k; i++) {

data[k-i][i] = data[k][0] + i;

}

}

}

//Down:上半部分,不负责对角线,斜线数为k,1<=k<=(n-2),对于矩阵阶数n区分奇偶,k也区分

每条斜线的最大数成递减数列,以n*n为开始

if (n % 2 == 1) {//n为奇数

for (int k = 1; k <= n - 2; k++) {

if (k % 2 == 0) { //如果k为偶数,最大数在下方

data[k][n-1] = data[n-1][n-1] - (n - k - 1) * (n - k)/2;

for (int i = 1; i < n - k; i++) { //从上至下,依次计算n-1-k条数据

data[i + k][n-1-i] = data[k][n-1] - i; //行递增,列递减,和为n+k-1

}

} else {//如果k为偶数,最大数在下方

data[n - 1][k] = data[n - 1][n - 1] - (n - k - 1) * (n - k) / 2;

for (int i = 1; i < n - k; i++) { //从下至上,依次计算n-1-k条数据

data[n - 1 - i][i + k] = data[n - 1][k] - i; //行递减,列递增,和为n+k-1

}

}

}

} else { //n为奇数,正好与偶数情况相反

for (int k = 1; k <= n - 2; k++) {

if (k % 2 == 1) { //如果k为奇数,最大数在下方

data[n-1][k] = data[n-1][n-1] - (n - k - 1) * (n - k)/2;

for (int i = 1; i < n - k; i++) { //从上至下,依次计算n-1-k条数据

data[n-1-i][i+k] = data[n-1][k] - i; //行递减,列递增,和为n+k-1

}

} else {//如果k为偶数,最大数在上方

data[k][n-1] = data[n - 1][n - 1] - (n - k - 1) * (n - k) / 2;

for (int i = 1; i < n - k; i++) { //从下至上,依次计算n-1-k条数据

data[i+k][n-i-1] = data[k][n-1] - i; //行递增,列递减,和为n+k-1

}

}

}

}

for (int i = 0; i < data.length; i++) {

for (int j = 0; j < data[i].length; j++) {

System.out.print(data[i][j] + " ");

}

System.out.println();

}

}

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("请输入一个蛇形矩阵的阶数:");

SnakeNumber sn = new SnakeNumber(scan.nextInt());

sn.print();

}

}


http://www.ngui.cc/51cto/show-721.html

相关文章

主动轮廓线模型Snake模型简介openCV中cvSnakeImage()函数代码分析

主动轮廓线模型又称为Snake模型&#xff0c;自Kass于1987年提出以来&#xff0c;已广泛应用于数字图像分析和计算机视觉领域。由于Snake模型具有良好的提取和跟踪特定区域内目标轮廓的能力&#xff0c;因此非常适合于医学图像如CT和MR图像的处理&#xff0c;以获得特定器官及组…

蛇形矩阵实现算法

题目&#xff1a;在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n4时方阵为&#xff1a;10 11 12 19 16 13 28 15 14 37 6 5 4package com.copycat.test; import java. util.*; public class Main {public static void main(String[] args) {Scanner s new Sca…

迈尔斯差分算法

文章目录说点什么算法简介算法名词解释将字符串转换用图表示出来算法中的几个定义1. Snake&#xff08;蛇形线&#xff09;2. d contours&#xff08;d步轮廓线&#xff09;3. K线解释看不懂&#xff0c;一看图就明白了&#xff1a;算法的原理ZERO&#xff1a;怎样才能解决问题…

初等贪吃蛇的基本算法

作为一个渣渣程序猿&#xff0c;我来讲一下贪吃蛇的基本算法。 我们采用老师所讲的“逐步求精”的办法。 先找出主干 主干1&#xff1a; 定义蛇的基本特征&#xff1a; #define SNAKE_HEAD H #define SNAKE_BODY X #define BLANK_CELL #define WALL_CELL * #define …

贪吃蛇博弈算法python_浅析初等贪吃蛇AI算法

作为小学期程序设计训练大作业的一部分&#xff0c;也是自己之前思考过的一个问题&#xff0c;终于利用小学期完成了贪吃蛇AI的一次尝试&#xff0c;下作一总结。背景介绍&#xff1a;首先&#xff0c;我针对贪吃蛇AI这一关键词在百度和google上尽心了检索&#xff0c;大致获得…

snake模型求解

&#xfeff;&#xfeff;snake 模型 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线&#xff0c;P是任意的参数化变量&#xff0c;设K表示曲 率&#xff0c;T表示切线&#xff0c;N表示法线&#xff0c;则有如下关系存在&#xff1a;因为T和N是互相垂直的(如图所示)&…

Snake Matrix 模拟 数学规律 Snake Matrix

不用找每行和的数学规律&#xff0c;不用开二维数组&#xff0c;也可以求出每行的和。 思路&#xff1a; 四个方向的优先级是→ ↓ ← ↑ &#xff0c;在拐点会受到了正方形主对角线&#xff0c;辅对角线的限制而换方向&#xff0c;用此规律模拟出蛇形矩阵&#xff0c;内存限制…

A. Fox And Snake

题目链接&#xff1a;http://codeforces.com/problemset/problem/510/A 510A. Fox And Snake time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output 题目描述 Fox Ciel starts to learn programming. The first tas…

前几天搞定了贪吃蛇自动寻路算法……

写了几天&#xff0c;搞定了贪吃蛇自动寻路……目前在20*20的格子上面可以稳定跑到100分&#xff0c;200的话……看运气吧o(╯□╰)o&#xff0c;总之算法还有很多可以修改的地方&#xff0c;而且UI部分还有部分没写的…… 总结下&#xff1a;这次写的话主要算法用的是BFS&…

linux inode报警对应的操作

for i in /*; do echo $i; find $i | wc -l; done