Created
April 15, 2016 06:00
Matrix rotation - study the code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
namespace HRank | |
{ | |
class Program | |
{ | |
static public char[] before = new char[0]; | |
static public char[] after = new char[0]; | |
static void Main(string[] args) | |
{ | |
string[] vars = Console.ReadLine().Split(' ').ToArray(); | |
int rotates = Convert.ToInt32(vars[2]); | |
int rows = Convert.ToInt32(vars[0]); | |
int cols = Convert.ToInt32(vars[1]); | |
int temp = -1; | |
int[,] matrix = new int[rows, cols]; | |
for (int i = 0; i < rows; i++) | |
{ | |
string[] input = Console.ReadLine().Split(' ').ToArray(); | |
for (int j = 0; j < cols; j++) | |
matrix[i, j] = Convert.ToInt32(input[j]); | |
} | |
//while(rotates > 0) | |
//{ | |
// rotates--; | |
int minCornerX = 0; | |
int minCornerY = 0; | |
int maxCornerX = rows - 1; | |
int maxCornerY = cols - 1; | |
int y = 0; | |
int x = 0; | |
while (minCornerX < maxCornerX && minCornerY < maxCornerY) | |
{ | |
int reduce = ((maxCornerX - minCornerX) + 1) * 2 + ((maxCornerY - minCornerY - 1) * 2); | |
int rotated = 0; | |
while (rotated + reduce <= rotates) | |
rotated += reduce; | |
while (rotated < rotates) | |
{ | |
rotated++; | |
//rotate col down | |
temp = matrix[maxCornerX, minCornerY]; | |
for (x = maxCornerX; x > minCornerX; x--) | |
{ | |
matrix[x, minCornerY] = matrix[x - 1, minCornerY]; | |
} | |
//rotate row right | |
int temp2 = matrix[maxCornerX, maxCornerY]; | |
for (y = maxCornerY; y > minCornerY + 1; y--) | |
{ | |
matrix[maxCornerX, y] = matrix[maxCornerX, y - 1]; | |
} | |
matrix[maxCornerX, y] = temp; | |
//rotate col up | |
temp = matrix[minCornerX, maxCornerY]; | |
for (x = minCornerX; x < maxCornerX - 1; x++) | |
{ | |
matrix[x, maxCornerY] = matrix[x + 1, maxCornerY]; | |
} | |
matrix[x, maxCornerY] = temp2; | |
//rotate row left | |
for (y = minCornerY; y < maxCornerY - 1; y++) | |
{ | |
matrix[minCornerX, y] = matrix[minCornerX, y + 1]; | |
} | |
matrix[minCornerX, y] = temp; | |
} | |
minCornerX++; | |
minCornerY++; | |
maxCornerY--; | |
maxCornerX--; | |
} | |
//} | |
for (int i = 0; i < matrix.GetLength(0); i++) | |
{ | |
for (int j = 0; j < matrix.GetLength(1); j++) | |
Console.Write(matrix[i, j] + " "); | |
Console.WriteLine(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment