蛇形填数
enum Direct{
Up,
Down,
Left,
Right
}
static int[][] GetTwoDimensionArr(int lineNum)
{
Direct direct = Direct.Down;
int val = 1;
int[][] arr = new int[lineNum][];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = new int[lineNum];
}
int currLine = 0, currRow = 0;
while (val != Math.Pow(lineNum,2))
{
arr[currLine][currRow] = val;
switch (direct)
{
case Direct.Up:
if (currLine == 0 || arr[currLine - 1][currRow] != 0)
{
direct = Direct.Left;
currRow--;
}
else
{
currLine--;
}
break;
case Direct.Down:
if (currLine == lineNum - 1 || arr[currLine + 1][currRow] != 0)
{
direct = Direct.Right;
currRow++;
}
else
{
currLine++;
}
break;
case Direct.Left:
if (currRow == 0 || arr[currLine][currRow - 1] != 0)
{
direct = Direct.Down;
currLine++;
}
else
{
currRow--;
}
break;
case Direct.Right:
if (currRow == lineNum - 1 || arr[currLine][currRow + 1] != 0)
{
direct = Direct.Up;
currLine--;
}
else
{
currRow++;
}
break;
default:
break;
}
val++;
}
return arr;
}
static void Main(string[] args){
int[][] arr = GetTwoDimensionArr(10);
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr[i].Length; j++)
{
Console.Write(arr[i][j] + "\t");
}
Console.Write("\n");
}
}