Advertisement
eandmir

MaxSeqInRowCollDiag

Jan 14th, 2013
711
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. //We are given a matrix of strings of size N x M. Sequences in the matrix we define as sets of several neighbor elements
  2. //located on the same line, column or diagonal. Write a program that finds the longest sequence of equal strings in the matrix.
  3.  
  4. using System;
  5. using System.Collections.Generic;
  6.  
  7. class MaxSeqInRowCollDiag
  8. {
  9. static void Main()
  10. {
  11. //Initialization
  12. //If you don't want to input you own values you can use example inputs given at the end
  13. Console.WriteLine("Enter martix size: ");
  14. int rowN = int.Parse(Console.ReadLine());
  15. int colM = int.Parse(Console.ReadLine());
  16. string[,] matrix = new string[rowN, colM];
  17. List<string> listMaxSeq=new List<string>();
  18. int curSum = 1, maxSum = 0, tempRow = 1, tempCol = 0;
  19.  
  20. //Fill matrix
  21. for (int row = 0; row < rowN; row++)
  22. {
  23. for (int coll = 0; coll < colM; coll++)
  24. {
  25. matrix[row, coll] = Console.ReadLine();
  26. }
  27. }
  28.  
  29. //Print main marix
  30. Console.WriteLine("Main marix");
  31. for (int row = 0; row < rowN; row++)
  32. {
  33. for (int coll = 0; coll < colM; coll++)
  34. {
  35. Console.Write("{0,5}", matrix[row, coll]);
  36. }
  37. Console.WriteLine();
  38. }
  39.  
  40. //Check for max sequence in rows
  41. for (int row = 0; row < rowN; row++)
  42. {
  43. for (int coll = 0; coll < colM-1; coll++)
  44. {
  45. curSum = ((matrix[row, coll] == matrix[row, coll + 1]) ? ++curSum : 1);
  46. if (curSum == maxSum)
  47. {
  48. listMaxSeq.Add(matrix[row, coll]);
  49. }
  50. else if ( curSum > maxSum)
  51. {
  52. maxSum = curSum;
  53. listMaxSeq.Clear();
  54. listMaxSeq.Add(matrix[row, coll]);
  55. }
  56. }
  57. curSum = 1;
  58. }
  59.  
  60. //Checks max sequence in colls
  61.  
  62. for (int coll = 0; coll < colM; coll++)
  63. {
  64. for (int row = 0; row < rowN-1; row++)
  65. {
  66. curSum = ((matrix[row, coll] == matrix[row+1, coll]) ? ++curSum: 1);
  67. if (curSum == maxSum)
  68. {
  69. listMaxSeq.Add(matrix[row, coll]);
  70. }
  71. else if ( curSum > maxSum)
  72. {
  73. maxSum = curSum;
  74. listMaxSeq.Clear();
  75. listMaxSeq.Add(matrix[row, coll]);
  76. }
  77. }
  78. curSum = 1;
  79. }
  80.  
  81. //Check "Main diagonal" and these above it
  82. for (int i = 0; i < colM-1; i++)
  83. {
  84. for (int row = 0, coll = tempCol; row < rowN-1 && coll < colM-1; row++, coll++)
  85. {
  86. curSum = ((matrix[row, coll] == matrix[row + 1, coll+1]) ? ++curSum : 1);
  87. if (curSum == maxSum)
  88. {
  89. listMaxSeq.Add(matrix[row, coll]);
  90. }
  91. else if (curSum > maxSum)
  92. {
  93. maxSum = curSum;
  94. listMaxSeq.Clear();
  95. listMaxSeq.Add(matrix[row, coll]);
  96. }
  97. }
  98. tempCol++;
  99. curSum = 1;
  100. }
  101.  
  102. //Check diagonals under "Main diagonal"
  103. for (int i = 0; i < rowN-1; i++)
  104. {
  105. for (int row = tempRow, coll = 0; row < rowN - 1 && coll < colM - 1; row++, coll++)
  106. {
  107. curSum = ((matrix[row, coll] == matrix[row + 1, coll+1]) ? ++curSum : 1);
  108. if (curSum == maxSum)
  109. {
  110. listMaxSeq.Add(matrix[row, coll]);
  111. }
  112. else if (curSum > maxSum)
  113. {
  114. maxSum = curSum;
  115. listMaxSeq.Clear();
  116. listMaxSeq.Add(matrix[row, coll]);
  117. }
  118. }
  119. tempRow++;
  120. curSum = 1;
  121. }
  122.  
  123.  
  124. //Print result
  125. Console.WriteLine("Max sequence is of {0} elemets",maxSum);
  126. for (int i = 0; i < listMaxSeq.Count; i++)
  127. {
  128. Console.Write(listMaxSeq[i] + " ");
  129. }
  130. Console.WriteLine();
  131. }
  132. }
  133.  
  134. //Test cases
  135.  
  136. //3
  137. //4
  138. //ha
  139. //fifi
  140. //ho
  141. //hi
  142. //fo
  143. //pa
  144. //fifi
  145. //xx
  146. //xxx
  147. //fo
  148. //ha
  149. //xx
  150.  
  151. //3
  152. //4
  153. //ha
  154. //fifi
  155. //ho
  156. //hi
  157. //fo
  158. //ha
  159. //hi
  160. //xx
  161. //xxx
  162. //ho
  163. //ha
  164. //xx
  165.  
  166. //3
  167. //3
  168. //s
  169. //qq
  170. //s
  171. //pp
  172. //pp
  173. //s
  174. //pp
  175. //qq
  176. //s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement