Advertisement
sashomaga

Untitled

Dec 9th, 2012
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.68 KB | None | 0 0
  1. using System;
  2.    
  3.         //Write a program that reads a positive integer number N (N < 20) from console and outputs in the console the numbers
  4.         //1 ... N numbers arranged as a spiral.
  5.         //Example for N = 4
  6.         //        1  2  3 4
  7.         //       12 13 14 5
  8.         //       11 16 15 6
  9.         //       10  9  8 7
  10. class Program
  11. {
  12.  
  13.     private static int data = 1;
  14.  
  15.     static void Main()
  16.     {
  17.         int col, row, size;
  18.         size = int.Parse(Console.ReadLine());
  19.         CheckInput(size);
  20.         col = row = size;
  21.         int[,] matrix = new int[col, row];
  22.         SetMatrixToZero(matrix, col, row);
  23.  
  24.         while (true)
  25.         {
  26.             matrix = Right(matrix, col, row);
  27.             matrix = Down(matrix, col, row);
  28.             matrix = Left(matrix, col, row);
  29.             matrix = Up(matrix, col, row);
  30.         }
  31.     }
  32.  
  33.     private static int[,] Up(int[,] matrix, int col, int row)
  34.     {
  35.         for (int x = 0; x < col; x++)
  36.         {
  37.             for (int y = 0; y < row; y++)
  38.             {
  39.                 if (matrix[x, y] == 0 && matrix[x, y + 1] > 0 && x == 0) //first
  40.                 {
  41.                     matrix[x, y] = data;
  42.                     CheckData(matrix, col, row);
  43.                     data++;
  44.                     for (int i = y - 1; i >= 0; i--)
  45.                     {
  46.                         if (matrix[x, i] == 0)
  47.                         {
  48.                             matrix[x, i] = data;
  49.                             CheckData(matrix, col, row);
  50.                             data++;
  51.                         }
  52.                         if (i == 0)
  53.                         {
  54.                             return matrix;
  55.                         }
  56.                         if (matrix[x, i - 1] > 0)
  57.                         {
  58.                             return matrix;
  59.                         }
  60.                     }
  61.                 }
  62.                 if (matrix[x, y] == 0 && matrix[x, y + 1] > 0 && matrix[x - 1, y] > 0) //second
  63.                 {
  64.                     matrix[x, y] = data;
  65.                     CheckData(matrix, col, row);
  66.                     data++;
  67.                     for (int i = y - 1; i >= 0; i--)
  68.                     {
  69.                         if (matrix[x, i] > 0)
  70.                         {
  71.                             return matrix;
  72.                         }
  73.                         matrix[x, i] = data;
  74.                         CheckData(matrix, col, row);
  75.                         data++;
  76.                         if (matrix[x, i - 1] > 0)
  77.                         {
  78.                             return matrix;
  79.                         }
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.         return matrix;
  85.     }
  86.  
  87.     private static int[,] Left(int[,] matrix, int col, int row)
  88.     {
  89.         for (int x = 0; x < col; x++)
  90.         {
  91.             for (int y = 0; y < row; y++)
  92.             {
  93.                 if (matrix[x, y] == 0 && y == row - 1 && matrix[x + 1, y] > 0) //first
  94.                 {
  95.                     matrix[x, y] = data;
  96.                     data++;
  97.                     for (int i = x - 1; i >= 0; i--)
  98.                     {
  99.                         if (matrix[i, y] == 0)
  100.                         {
  101.                             matrix[i, y] = data;
  102.                             data++;
  103.                         }
  104.                         if (i == 0)
  105.                         {
  106.                             return matrix;
  107.                         }
  108.                     }
  109.                 }
  110.                 if (matrix[x, y] == 0 && matrix[x + 1, y] > 0 && matrix[x, y + 1] > 0) // second
  111.                 {
  112.                     matrix[x, y] = data;
  113.                     CheckData(matrix, col, row);
  114.                     data++;
  115.                     for (int i = x - 1; i >= 0; i--)
  116.                     {
  117.                         if (matrix[i, y] > 0)
  118.                         {
  119.                             return matrix;
  120.                         }
  121.                         matrix[i, y] = data;
  122.                         CheckData(matrix, col, row);
  123.                         data++;
  124.                         if (matrix[i - 1, y] > 0)
  125.                         {
  126.                             return matrix;
  127.                         }
  128.                     }
  129.  
  130.                 }
  131.  
  132.             }
  133.         }
  134.         return matrix;
  135.     }
  136.  
  137.     private static int[,] Down(int[,] matrix, int col, int row)
  138.     {
  139.         for (int x = 0; x < col; x++)
  140.         {
  141.             for (int y = 0; y < row; y++)
  142.             {
  143.                 if (matrix[x, y] == 0 && x == col - 1) //first
  144.                 {
  145.                     matrix[x, y] = data;
  146.                     CheckData(matrix, col, row);
  147.                     data++;
  148.                     for (int i = y + 1; i < row; i++)
  149.                     {
  150.                         if (matrix[x, i] > 0)
  151.                         {
  152.                             return matrix;
  153.                         }
  154.                         matrix[x, i] = data;
  155.                         CheckData(matrix, col, row);
  156.                         data++;
  157.                         if (i == row - 1)
  158.                         {
  159.                             return matrix;
  160.                         }
  161.                     }
  162.                 }
  163.  
  164.                 if (matrix[x, y] == 0 && matrix[x + 1, y] > 0 && matrix[x, y - 1] > 0)
  165.                 {
  166.                     matrix[x, y] = data;
  167.                     data++;
  168.                     for (int i = y + 1; i < row; i++)
  169.                     {
  170.                         if (matrix[x, i] > 0)
  171.                         {
  172.                             return matrix;
  173.                         }
  174.                         matrix[x, i] = data;
  175.                         data++;
  176.                         if (i == row)
  177.                         {
  178.                             return matrix;
  179.                         }
  180.                     }
  181.                 }
  182.             }
  183.         }
  184.         return matrix;
  185.     }
  186.  
  187.     private static void PrintMatrix(int[,] matrix, int col, int row)
  188.     {
  189.         Console.Clear();
  190.         for (int x = 0; x < col; x++)
  191.         {
  192.             for (int y = 0; y < row; y++)
  193.             {
  194.                 Console.SetCursorPosition(x * 3, y);
  195.                 Console.Write(matrix[x, y]);
  196.             }
  197.         }
  198.     }
  199.  
  200.     private static void SetMatrixToZero(int[,] matrix, int col, int row)
  201.     {
  202.         for (int x = 0; x < col; x++)
  203.         {
  204.             for (int y = 0; y < row; y++)
  205.             {
  206.                 matrix[x, y] = 0;
  207.             }
  208.         }
  209.     }
  210.  
  211.     private static int[,] Right(int[,] matrix, int col, int row)
  212.     {
  213.         for (int x = 0; x < col; x++)
  214.         {
  215.             for (int y = 0; y < row; y++)
  216.             {
  217.                 if (matrix[x, y] == 0 && data == 1) //first time
  218.                 {
  219.                     matrix[x, y] = data;
  220.                     data++;
  221.                     for (int i = y + 1; i < col; i++)
  222.                     {
  223.                         matrix[i, y] = data;
  224.                         data++;
  225.                         if (i < col - 1)
  226.                         {
  227.                             if (matrix[i + 1, y] > 0)
  228.                             {
  229.                                 return matrix;
  230.                             }
  231.                         }
  232.                         if (i + 1 == col)
  233.                         {
  234.                             return matrix;
  235.                         }
  236.                     }
  237.                 }
  238.                 if (matrix[x, y] == 0 && matrix[x - 1, y] > 0 && matrix[x, y - 1] > 0) //second time
  239.                 {
  240.                     matrix[x, y] = data;
  241.                     CheckData(matrix, col, row);
  242.                     data++;
  243.                     for (int i = x + 1; x < col; i++)
  244.                     {
  245.                         if (matrix[i, y] > 0)
  246.                         {
  247.                             return matrix;
  248.                         }
  249.                         matrix[i, y] = data;
  250.                         CheckData(matrix, col, row);
  251.                         data++;
  252.                         if (matrix[i + 1, y] > 0)
  253.                         {
  254.                             return matrix;
  255.                         }
  256.                     }
  257.                 }
  258.             }
  259.         }
  260.         return matrix;
  261.     }
  262.  
  263.     private static void CheckData(int[,] matrix, int col, int row)
  264.     {
  265.         if (data == col * col)
  266.         {
  267.             PrintMatrix(matrix, col, row);
  268.             Environment.Exit(0);
  269.         }
  270.     }
  271.  
  272.     private static void CheckInput(int size)
  273.     {
  274.         if (size < 0 || size > 19)
  275.         {
  276.             Console.WriteLine("Wrong data!");
  277.             Environment.Exit(0);
  278.         }
  279.     }
  280.  
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement