`
oboaix
  • 浏览: 274263 次
社区版块
存档分类
最新评论

内螺旋数组java实现

    博客分类:
  • JAVA
 
阅读更多

最初学习C语言时,看到国外程序员的内螺旋实现,都懵了,感觉超级复杂,一直没有去检查具体是如何实现的,最近又再次看到这种,想通过java语言也来完成这个方式,具体代码如下:

/**
 * 
 * @author dennis zhao
 * General logical way of thinking
 * 2013-09-15
 */
public class InnerSprialArray {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		print();
		for (int i = 0; i < result.length; i++) {
			for (int j = 0; j < result[i].length; j++) {
				int a = result[i][j];
				if (a==1) {
					System.out.print((a < 10 ? "0" + a : a ) + "○" + "\t");
				} else if (a == COL * ROW){
					System.out.print((a < 10 ? "0" + a : a ) + "●" + "\t");
				} else {
					System.out.print((a < 10 ? "0" + a : a ) + directions[i][j] + "\t");
				}
			}
			System.out.println();
		}
	}

	/**
	 * simple logic: from left ---> right; top ---> down; right ---> left;  down ---> top;
	 * if find accessed element, it change direction
	 */
	private static void print() {
		int count = 0;
		int row = 0;
		int col = -1;
		while (count < COL * ROW) {
			// left to right
			col++;
			while (col < COL && initial[row][col] == 0) {
				initial[row][col] = 1;//if no access(0), it change this access flag = 1
				count++;
				result[row][col] = count;
				directions[row][col] = "→";
				col++;
			}
			col--;// last column minus 1

			// top to down
			row++;
			while (row < ROW && initial[row][col] == 0) {
				initial[row][col] = 1;
				count++;
				result[row][col] = count;
				directions[row][col] = "↓";
				row++;
			}
			row--;// last row minus 1

			// right to left
			col--;
			while (col >= 0 && initial[row][col] == 0) {
				initial[row][col] = 1;
				count++;
				result[row][col] = count;
				directions[row][col] = "←";
				col--;
			}
			col++;// last column add 1

			// down to top
			row--;
			while (row >= 0 && initial[row][col] == 0) {
				initial[row][col] = 1;
				count++;
				result[row][col] = count;
				directions[row][col] = "↑";
				row--;
			}
			row++;// last row add 1
		}
	}
	
	private static int ROW = 10;  
	private static int COL = 10;
	private static int [][]result = new int[ROW][COL];//record real value
	private static int [][]initial = new int[ROW][COL];// recod flag, 0 no access, 1 accessed
	private static String[][] directions = new String[ROW][COL];//record direction flag → ↓ ← ↑

}

 

效果图如下

 

 

 

  • 大小: 41.3 KB
分享到:
评论

相关推荐

    Java实现顺时针输出螺旋二维数组的方法示例

    本篇文章将详细讲解如何利用Java实现这个功能。 首先,我们需要理解螺旋数组的规律。螺旋数组从左上角开始,沿着顺时针方向依次填充数字。当一行或一列填满后,数组的遍历会转向下一圈。例如,对于5x5的数组,其...

    Java实现n阶螺旋方阵

    在Java中实现n阶螺旋方阵是一项常见的编程任务,这有助于理解和掌握数组的操作以及循环控制结构的使用。下面我们将深入探讨如何用Java来实现这个功能。 首先,我们需要了解螺旋矩阵的基本概念。假设我们有一个n阶的...

    内螺旋矩阵算法

    内螺旋矩阵算法是一种在二维数组中填充数字的特殊方式,其特点是数字按顺时针方向从数组中心向外螺旋式地填充。这种填充模式在数据结构和算法的学习中颇为有趣,因为它涉及到了数组的操作以及对角线元素的处理。在...

    螺旋式遍历二维数组(矩阵)Demo

    以下是一个简单的Java实现,即`SpiralMatrix.java`文件可能包含的代码: ```java public class SpiralMatrix { public static void spiralPrint(int[][] matrix) { if (matrix == null || matrix.length == 0) ...

    螺旋矩阵 java

    本文详细介绍了如何使用Java实现螺旋矩阵的生成。通过对核心变量和算法流程的分析,我们不仅理解了螺旋矩阵的基本概念,还学会了如何编写相应的程序来生成这种特殊的矩阵。未来可以通过探索不同的变体或扩展功能来...

    java旋转二维数组实例

    `arrprint` 方法则用于打印二维数组的内容,使我们可以看到生成的螺旋数组。 `specArr` 方法的核心逻辑在于使用一个循环,每次循环处理一层数组的四个边(上、右、下、左),并根据当前边的位置填充值。`len` 表示...

    java编写的螺旋矩阵很经典

    下面我们将详细探讨螺旋矩阵的原理、Java实现方法以及相关知识点。 首先,让我们理解螺旋矩阵的概念。假设我们有一个n×n的二维数组,我们从左上角开始,沿着顺时针方向填充数字。当行或列到达边界后,我们会转向下...

    java输出螺旋方阵

    编程输出螺旋方阵. 螺旋方阵是指将从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。如4阶的螺旋方阵形式如下: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 要求:1)从键盘输入螺旋方阵的阶数

    打印数字螺旋图案的 Java 程序.docx

    在 Java 编程中,打印数字螺旋图案是一项常见的练习,它有助于理解二维数组的遍历和控制流程。以下是一个简单的 Java 程序,用于根据给定的矩阵大小 `n` 打印出螺旋图案。这个程序的核心逻辑是通过一个二维数组 `...

    java 螺旋输出矩阵代码

    ### Java螺旋输出矩阵知识点解析 #### 一、题目要求与理解 题目要求用户输入一个正方形矩阵的大小,然后按照螺旋顺序输出该矩阵中的...通过以上解析,我们可以清晰地理解螺旋输出矩阵问题的算法思路及其Java实现方法。

    JAVA G型结构

    1. **二维数组的使用**:通过二维数组`s1`来模拟并存储G型螺旋结构,便于后续的处理和可视化展示。 2. **循环与条件控制**:利用多重循环和条件判断来实现G型螺旋结构的动态生成。 3. **方向控制**:通过变量`d`来...

    Java入门题目集合

    在解决这些问题时,还需要了解Java的基本语法,如变量声明、数据类型、流程控制(if、for、while等)、数组操作、字符串处理、函数定义和调用等。此外,良好的编程习惯,如代码结构清晰、注释充分,也是必不可少的。...

    JAVA 回型结构

    根据给定的文件标题“JAVA 回型结构”、描述“将黑方块与白方块排列成回型螺旋结构,大小可随意设定,小程序一个,字数要长”、标签“JAVA 回旋结构 数组”以及部分代码内容,我们可以深入探讨这个Java程序所涉及的...

    Java 入学考试题

    1、假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有...7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。

    java小练习题 适合初学者

    在Java中实现杨辉三角形,可以帮助初学者理解数组和递归的概念。 8. **直角三角形**:这是一个基本的图形绘制练习,通过控制循环次数和输出字符,可以生成不同大小的直角三角形。 9. **菱形**:菱形的绘制需要考虑...

    Java-magicSquare:Java Magic Square算法算法实现

    在这个Java项目中,我们将深入探讨如何用Java编程语言实现魔术广场算法。 首先,理解魔术广场的基本概念是必要的。一个n阶魔术广场是由n×n个单元格组成的,每个单元格内填入从1到n²的唯一数字。对于一个n阶魔术...

    递归遍历矩阵.rar

    总结来说,"递归遍历矩阵.rar"可能包含了一个使用Java实现的递归遍历二维矩阵的示例,通过这样的代码,我们可以学习如何有效地处理和操作矩阵数据,这对于理解数据结构和算法有极大的帮助,特别是在解决涉及矩阵的...

    leetcode java

    掌握了这50道经典题目的Java实现方法,不仅能够提升你的算法能力,还能帮助你在面试中脱颖而出。下面将分别介绍这些题目的主题以及一些知识点。 **数组和字符串(Array/Strings)** 数组和字符串的处理是编程中最为...

    螺旋矩阵和折线矩阵算法

    螺旋矩阵和折线矩阵是两种在计算机科学中处理二维数组,特别是矩阵时常见的算法。它们在数据结构和算法设计中有着独特的应用,特别是在图形处理、矩阵运算和数据存储等方面。 **螺旋矩阵** 是一种将一个n×n的矩阵...

Global site tag (gtag.js) - Google Analytics