/*
* (C#)打印蛇形正方形矩阵, 如:
* 1 2 3
* 8 9 4
* 7 6 5
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
enum Direction
{
right, down, left, up
}
public static int[][] GetSnakeMatrix(int rank)
{
int[][] array = AssignArray(rank);
int dir = 0;
int row = 0, colomn = 0;
int num = rank * rank;
for (int i = 1; i <= num; )
{
if (colomn >= rank)
colomn--;
if (colomn < 0)
colomn++;
if (row >= rank)
row--;
if (row < 0)
row++;
if (array[row][colomn] == 0)
array[row][colomn] = i++;
else
{
if (array[row][colomn] != i - 1)
{
switch (dir)
{
default:
case (int)Direction.up:
row++;
break;
case (int)Direction.right:
colomn--;
break;
case (int)Direction.down:
row--;
break;
case (int)Direction.left:
colomn++;
break;
}
}
dir++;
if (dir > (int)Direction.up)
dir = (int)Direction.right;
}
switch (dir)
{
default:
case (int)Direction.right:
colomn++;
break;
case (int)Direction.down:
row++;
break;
case (int)Direction.left:
colomn--;
break;
case (int)Direction.up:
row--;
break;
}
}
return array;
}
public static int[][] AssignArray(int rank)
{
int[][] array = new int[rank][];
for (int i = 0; i < rank; i++)
{
int[] tmpArr = new int[rank];
array[i] = tmpArr;
}
return array;
}
public static void PrintArray(int[][] array)
{
for (int i = 0; i < array.Length; i++)
{
for (int j = 0; j < array[i].Length; j++)
{
Console.Write("{0, 3}", array[i][j]);
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
PrintArray(GetSnakeMatrix(1));
Console.WriteLine();
PrintArray(GetSnakeMatrix(2));
Console.WriteLine();
PrintArray(GetSnakeMatrix(3));
Console.WriteLine();
PrintArray(GetSnakeMatrix(8));
Console.WriteLine();
PrintArray(GetSnakeMatrix(9));
Console.WriteLine();
PrintArray(GetSnakeMatrix(10));
Console.WriteLine();
}
}
}
/*optimized GetSnakeMatrix(int rank){}
public static int[][] GetSnakeMatrix(int rank)
{
int[][] array = AssignArray(rank);
int dir = 0;
int row =0, colomn = 0;
int num = rank * rank;
for (int i = 1; i <= num; )
{
if (array[row][colomn] == 0)
array[row][colomn] = i++;
else
{
dir++;
if (dir > (int)Direction.up)
dir = (int)Direction.right;
}
switch (dir)
{
default:
case (int)Direction.right:
if (array[row][colomn] != i - 1)
row++;
if (colomn < rank - 1)
colomn++;
break;
case (int)Direction.down:
if (array[row][colomn] != i - 1)
colomn--;
if (row < rank - 1)
row++;
break;
case (int)Direction.left:
if (array[row][colomn] != i - 1)
row--;
if (colomn > 0)
colomn--;
break;
case (int)Direction.up:
if (array[row][colomn] != i - 1)
colomn++;
if (row > 0)
row--;
break;
}
}
return array;
}
*/
本文介绍了一种使用 C# 编程语言实现蛇形正方形矩阵的方法。通过定义枚举来控制填充方向,并利用二维数组进行矩阵填充,最终实现了从左到右、从上到下交替填充数字的蛇形矩阵。
786

被折叠的 条评论
为什么被折叠?



