Guest User

Untitled

a guest
Nov 15th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. private static int CalculatePeacefulArrangement(int queenCount, int[] chessTable, int startPosition, int result)
  2. {
  3. if (startPosition == chessTable.Length)
  4. {
  5. result++;
  6. return result;
  7. }
  8. for (int i = 0; i < queenCount; i++)
  9. {
  10. var index = Array.IndexOf(chessTable, 0, startPosition + i, queenCount - i);
  11. if (index != -1)
  12. {
  13. var row = index - startPosition;
  14. NoteBeatenCellAscendingDiagonal(queenCount, chessTable, index, 1);
  15. NoteBeatenCellDiscendingDiagonal(queenCount, chessTable, index, 1);
  16. NoteBeatenCellHorizontal(queenCount, chessTable, index, row, 1);
  17. result = CalculatePeacefulArrangement(queenCount, chessTable, startPosition + queenCount, result);
  18. NoteBeatenCellAscendingDiagonal(queenCount, chessTable, index, -1);
  19. NoteBeatenCellDiscendingDiagonal(queenCount, chessTable, index, -1);
  20. NoteBeatenCellHorizontal(queenCount, chessTable, index, row, -1);
  21. i = row;
  22. }
  23. else break;
  24. }
  25. return result;
  26. }
  27.  
  28. private static void NoteBeatenCellHorizontal(int queenCount, int[] chessTable, int index, int row, int marking)
  29. {
  30. var column = index / queenCount;
  31. for (int i = column; i < queenCount; i++)
  32. {
  33. chessTable[i * queenCount + row] += marking;
  34. }
  35. }
  36. private static void NoteBeatenCellAscendingDiagonal(int queenCount, int[] chessTable, int index, int marking)
  37. {
  38. for (int i = index; i < chessTable.Length; i += queenCount + 1)
  39. {
  40. chessTable[i] += marking;
  41. if (i / queenCount == queenCount - 1 || i % queenCount == queenCount - 1) break;
  42. }
  43. }
  44. private static void NoteBeatenCellDiscendingDiagonal(int queenCount, int[] chessTable, int index, int marking)
  45. {
  46. for (int i = index; i < chessTable.Length; i += queenCount - 1)
  47. {
  48. chessTable[i] += marking;
  49. if (i / queenCount == queenCount - 1 || i % queenCount == 0) break;
  50. }
  51. }
  52.  
  53. void PrintA()
  54. {
  55. for (int i = 0; i < 100; i++) Console.WriteLine($"A {i}");
  56. }
  57.  
  58. void PrintB()
  59. {
  60. for (int i = 0; i < 100; i++) Console.WriteLine($"B {i}");
  61. }
  62.  
  63. var taskA = Task.Run(()=>PrintA());
  64. var taskB = Task.Run(()=>PrintB());
  65.  
  66. Task.WaitAll(taskA, taskB);
Add Comment
Please, Sign In to add comment