91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java實現的打印螺旋矩陣算法示例

發布時間:2020-09-03 20:31:49 來源:腳本之家 閱讀:434 作者:huhaishen 欄目:編程語言

本文實例講述了Java實現的打印螺旋矩陣算法。分享給大家供大家參考,具體如下:

一個N階矩陣順時針呈螺旋狀,形如下面的矩陣:

Java實現的打印螺旋矩陣算法示例

思路:使用一個二維數組存放數據,數組初始化為0,數組共有n平方個元素,因為是從1開始,所以元素的值是從1到n×n。按照上面的路線從1開始遍歷一遍填入數據,每填入一個數據時后,判斷邊界和方向(說明,任意長度和寬度都可以使用這個思路,本例使用N*N的矩陣說明)。直接上代碼了:

package study.haishen.com;
/**
 * @author Administrator
 *
 */
public class SpiralMatrix {
    /**
     * @param n n階
     * @return
     */
    public int[][] createMatrix(int n)
    {
        int[][] matrix = new int[n][n];//n*n的二維數組,初始元素值都為0
        int right = 1, down = 2, left = 3, up = 4;//分別表示右下左上四個方向
        int direction = right;
        int numb = n * n;//n階矩陣,共有n×n個數
        int i = 0, j = 0;
        for (int p = 1; p <= numb; p++)
        {
            matrix[i][j] = p;
            //判斷方向向右的情況
            if(direction == right)
            {
                //如果當前位置的右面位置在右邊界內且值還是初始值,則行不變,列號向右移動一位
                if (j + 1 < n && matrix[i][j + 1] == 0)
                {
                    j++;
                } else {//如果超出右邊邊界,或者右面的元素已經被修改過,則向下移動一行,且將方向改為向下
                    i++;
                    direction = down;
                    continue;
                }
            }
            //判斷方向向下的情況
            if (direction == down)
            {
                //如果當前位置的下面位置在下邊界內且值還是初始值,則列不變,行號向下移動一位
                if (i + 1 < n && matrix[i + 1][j] == 0)
                {
                    i++;
                } else {//如果超出下邊界,或者下面的元素已經被修改過,則向左移動一行,且將方向改為向左
                    j--;
                    direction = left;
                    continue;
                }
            }
            //判斷方向向左的情況
            if (direction == left)
            {
                //如果當前位置的左面位置在左邊界內且值還是初始值,則行不變,列號向左移動一位
                if (j - 1 >= 0 && matrix[i][j - 1] == 0)
                {
                    j--;
                } else {//如果超出左邊界,或者左面的元素已經被修改過,則向上移動一行,且將方向改為向上
                    i--;
                    direction = up;
                    continue;
                }
            }
            //判斷方向向上的情況
            if (direction == up)
            {
                //如果當前位置的上面位置在上邊界內且值還是初始值,則列不變,行號向左移動一位
                if (i - 1 >= 0 && matrix[i - 1][j] == 0)
                {
                    i--;
                } else {//如果超出上邊界,或者上面的元素已經被修改過,則向右移動一列,且將方向改為向右
                    j++;
                    direction = right;
                    continue;
                }
            }
        }
        return matrix;
    }
    /**
     * 測試
     * @param args
     */
    public static void main(String[] args) {
        int n = 10;
        SpiralMatrix s = new SpiralMatrix();
        int[][] data = s.createMatrix(n);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}

運行結果:

Java實現的打印螺旋矩陣算法示例

更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商丘市| 延川县| 汉寿县| 盐山县| 泾川县| 尤溪县| 河曲县| 万山特区| 淮滨县| 正镶白旗| 拉萨市| 龙南县| 安康市| 武乡县| 浮梁县| 丁青县| 永靖县| 常熟市| 荣昌县| 通渭县| 乌恰县| 乌审旗| 陈巴尔虎旗| 松溪县| 宁陵县| 湘乡市| 建始县| 株洲市| 石台县| 潞城市| 深泽县| 湟源县| 田东县| 桦甸市| 六盘水市| 余江县| 汽车| 桓台县| 潼关县| 晋城| 河曲县|