Как я могу хранить данные (list<list<objects>>
) таким образом, чтобы я мог получить доступ к предыдущему состоянию?
Это для решателя судоку, написанного на c #.Я попытался сгенерировать список «более высокого уровня» (List<List<List<object>>>
) и сохранить его в этом, однако кажется, что этот список хранит только указатель или ссылку на мой объект, так как изменения в дальнейшем также влияют на хранимые экземпляры.
void publics() // only in void for display purpose, acctualy declared in class
{
List<List<Cell>> SBoard = new List<List<Cell>>(); // list used in calculations
List<List<List<Cell>>> BoardListBackup = new List<List<List<Cell>>>(); // list to store SBoards
int GuessLevel = 0; // to keep track of how many guesses
}
void guess()
{
BoardListBackup.Add(SBoard); // store current board
Console.WriteLine("stored copy of board");
for (int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if (SBoard[i][j].Value == "0")
{
BoardListBackup.Add(SBoard); // possibly saves an instance of list at current state
SBoard[i][j].Value = SBoard[i][j].Possibly[0].ToString(); // guess first possible value of first unfilled cell
GuessLevel++;
UpdatePossibleValues();
Console.WriteLine("Guessing [{0}],[{1}] = {2}", i, j, SBoard[i][j].Possibly[0].ToString());
PrintBoardValues();
if (error == false)
{
InsertObvious();
}
else if (error == true)
{
Console.WriteLine("Bad guess, reverting board");
SBoard = BoardListBackup[GuessLevel - 1]; // what is the problem here??? Board is not rewerting?
BoardListBackup.RemoveAt(BoardListBackup.Count-1); // uncertain of syntax here
SBoard[i][j].RemovePossible(SBoard[i][j].Possibly[0].ToString()); // remove wrong guess from options
GuessLevel--;
PrintBoardValues();
}
}
}
}
Когда ошибка == true, я ожидаю, что SBoard вернется в состояние, сохраненное в BoardListBackup [GuessLevel-1], но оно просто останется в своем текущем состоянии.До сих пор я думаю, что единственное решение - это сохранить в виде текстового файла, но, поскольку мне нужно сохранить как значения ячеек, так и возможные значения для отдельных строк, я чувствую, что это будет сложная логика.