1 using System;
2
3 class GridDimensions {
4 public GridDimensions(int width, int height) {
5 width_ = width;
6 height_ = height;
7 }
8
9
10 public int width_;
11 public int height_;
12 }
13
14
15 class Grid {
16 public Grid(GridDimensions gridDimensions) {
17 gridDimensions_ = gridDimensions;
18 grid_ = new char[gridDimensions_.width_, gridDimensions_.height_];
19 for (int y = 0; y < gridDimensions_.height_; ++y)
20 for (int x = 0; x < gridDimensions_.width_; ++x)
21 grid_[x, y] = ' ';
22 }
23
24 public Grid(Grid rhs) {
25 gridDimensions_ = rhs.gridDimensions_;
26 grid_ = new char[gridDimensions_.width_, gridDimensions_.height_];
27 for (int y = 0; y < gridDimensions_.height_; ++y)
28 for (int x = 0; x < gridDimensions_.width_; ++x)
29 grid_[x, y] = rhs.grid_[x, y];
30 }
31
32 public void write() {
33 for (int y = 0; y < gridDimensions_.height_; ++y) {
34 for (int x = 0; x < gridDimensions_.width_; ++x)
35 {Console.Write(grid_[x, y]);}
36 Console.Write('\n');
37 }
38 }
39
40 public char getCell(int x, int y) {return grid_[x,y];}
41
42 public void setCell(int x, int y, char c) { grid_[x, y] = c; }
43
44 public Grid placeSublist(WordList sublist) {
45 string firstWord = sublist.firstWord();
46 GridIterator gridIterator = new GridIterator(firstWord.Length, gridDimensions_);
47
48 while(gridIterator.isValid()) {
49 if(gridIterator.canPlace(firstWord, this)) {
50 Grid grid = new Grid(this);
51 gridIterator.place(firstWord, grid);
52 if (sublist.hasOnlyOneWord()) return grid;
53
54 Grid result = grid.placeSublist(new WordList(sublist));
55 if(result!=null) return result;
56 }
57 gridIterator.increment();
58 }
59
60 return null;
61 }
62
63
64 private GridDimensions gridDimensions_;
65 private char[,] grid_;
66 }
67