Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anatoliibobrov/matrixsnail
https://github.com/anatoliibobrov/matrixsnail
Last synced: about 20 hours ago
JSON representation
- Host: GitHub
- URL: https://github.com/anatoliibobrov/matrixsnail
- Owner: AnatoliiBobrov
- Created: 2023-11-25T18:52:04.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2023-11-25T19:17:49.000Z (12 months ago)
- Last Synced: 2023-11-26T20:25:40.523Z (12 months ago)
- Language: C#
- Size: 14.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Дана матрица целых чисел int[,] matrix размером MxN. Вернуть все её элементы, развёрнутые в массив с спиральном порядке против часовой стрелки.
Пример 1:
1 2 3
4 5 6
7 8 9
Входной параметр int[,] matrix = new int[3,3]{{1,2,3},{4,5,6},{7,8,9}};
Результирующий массив:[1,4,7,8,9,6,3,2,5]Пример 2:
1 2 3 4
5 6 7 8
9 10 11 12
Входной параметр int[,] matrix = new int[3,4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Результирующий массив:[1,5,9,10,11,12,8,4,3,2,6,7]///
/// Преобразует двухмерную матрицу в простую при "закручивании во внутрь" против часовой стрелки массива, начиная с элемента 0,0
///
/// исходная матрица
/// Одномерная матрица после преобразования размером length = M*N
public static int[] GetArray(ref int[,] matr)
{
// размеры матрицы, не берем данные из введенных пользователем для того,
// чтобы показать, что метод не завязан на консоль
var m = matr.GetLength(0);
var n = matr.GetLength(1);
length = m * n;//хранит результат работы функции
var result = new int[length];// хранят края области обхода массива
var mBegin = 0;
var mEnd = m - 1;
var nBegin = 0;
var nEnd = n - 1;
var i = 0;// указатели текущего положения в массиве
var x = 0;
var y = 0;// обход по кругу
while (i < length)
{
// движение вниз
while (x <= mEnd)
{
result[i] = matr[x, y];
i++;
x++;
}
x--;
y++;
nBegin++;// движение вправо
if (i < length)
{
while (y <= nEnd)
{
result[i] = matr[x, y];
i++;
y++;
}
y--;
x--;
mEnd--;// движение вверх
if (i < length)
{
while (x >= mBegin)
{
result[i] = matr[x, y];
i++;
x--;
}
y--;
x++;
nEnd--;// движение влево
if (i < length)
{
while (y >= nBegin)
{
result[i] = matr[x, y];
i++;
y--;
}
y++;
x++;
mBegin++;
}
}
}
}return result;
}