螺旋矩陣----在博客園上看見別人的算法沒有看明白自己搞了一個。


    

直接看代碼:

            //1.初始化數據
            int len = 10;//橫排的長度
            int dic = 0;//4個方向。
            int x = 0, y = 0;//當前的位置。
            int v = 1;//當前的值
            int q = 0;//當前已經畫的圈數
            int[][] info = new int[len][];//存放數組
            string zero = "";//格式化數據
            int zl = len * len;//矩陣的大小
            for (int i = 0; i < zl.ToString().Length; i++)
            {
                zero += "0";
            }
            for (int i = 0; i < info.Length; i++)
            {
                info[i] = new int[len];
            }

            //2.賦值
            for (int i = 0; i < zl; i++)
            {
                switch (dic % 4)
                {
                    case 0:
                        if (y == len - q - 1)
                        {
                            info[x][y] = v;
                            dic += 1;
                            x += 1;
                        }
                        else
                        {
                            info[x][y] = v;
                            y += 1;
                        }
                        break;
                    case 1:
                        if (x == len - q - 1)
                        {
                            info[x][y] = v;
                            dic += 1;
                            y -= 1;
                        }
                        else
                        {
                            info[x][y] = v;
                            x += 1;
                        }
                        break;
                    case 2:
                        if (y == q)
                        {
                            info[x][y] = v;
                            dic += 1;
                            x -= 1;
                        }
                        else
                        {
                            info[x][y] = v;
                            y -= 1;
                        }
                        break;
                    case 3:
                        if (x == q + 1)
                        {
                            info[x][y] = v;
                            dic += 1;
                            y += 1;
                            q += 1;
                        }
                        else
                        {
                            info[x][y] = v;
                            x -= 1;
                        }
                        break;
                }
                v += 1;
            }
            //3.打印
            for (int i = 0; i < info.Length; i++)
            {
                for (int j = 0; j < info[i].Length; j++)
                {
                    Console.Write(info[i][j].ToString(zero) + " ");
                }
                Console.WriteLine();
            }

 

思想是我們小時候的舉動:拿只筆在沙子上不停的畫圈圈,圈圈越來越小。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM