我最近偶然發現了一個項目(使用A * alg的8-puzzle求解器),其中一些代碼對我來說很奇怪,因爲我從來沒有見過它的喜歡。需要對這些代碼位的解釋
這條線是什麼意思?這是什麼 ?!
this[StateIndex]
這是什麼表示法?我根本無法理解它! 我發佈了一個樣本,以便您幾乎可以一起看到它。 還有一個問題,像StateNode一樣實現一個類是否沒有錯?它只使用一個構造函數來初始化它的字段,但是最糟糕的是,它們都是公開的!如果他/她沒有執行這項任務的功能?
public enum Direction
{
Up = 1, Down = 2, Left = 3, Right = 4, UpUp = 5, DownDown = 6, LeftLeft = 7, RightRight = 8, Stop = 9
}
class StateNode
{
public int Parent;
public List<int> Childs;
public Direction Move;
public Direction ParentMove;
public byte[,] State;
public byte Depth;
public byte NullRow;
public byte NullCol;
public StateNode()
{ }
public StateNode(int NewParent, Direction NewMove, Direction ParentMove, byte NewDepth, byte NewNullRow, byte NewNullCol)
{
this.Parent = NewParent;
this.State = new byte[5, 5];
this.Move = NewMove;
this.ParentMove = ParentMove;
this.Depth = NewDepth;
this.NullRow = NewNullRow;
this.NullCol = NewNullCol;
this.Childs = new List<int>();
}
}
class StateTree : List<StateNode>
{
public static long MakedNodes;
public static long CheckedNodes;
public static byte MaxDepth;
public List<int> Successor1(int StateIndex)
{
List<int> RetNodes = new List<int>();
StateNode NewState = new StateNode();
//Up
if (this[StateIndex].NullRow + 1 <= 3 && this[StateIndex].ParentMove != Direction.Up)
{
NewState = ChangeItemState(this[StateIndex], StateIndex, Direction.Up, Direction.Down, Convert.ToByte(this[StateIndex].Depth + 1), this[StateIndex].NullRow, this[StateIndex].NullCol, Convert.ToByte(this[StateIndex].NullRow + 1), this[StateIndex].NullCol);
this.Add(NewState);
RetNodes.Add(this.Count - 1);
StateTree.MakedNodes++;
this[StateIndex].Childs.Add(this.Count - 1);
if (NewState.Depth > StateTree.MaxDepth)
StateTree.MaxDepth = NewState.Depth;
}
//Down
//Left
//Right
return RetNodes;
}
}
如果您在理解特定語法時遇到困難,您並不需要發佈整個代碼。祝你好運! – SimpleVar 2012-07-06 13:05:17
也許我誤解了,但'StateIndex'被用作'this'中的一個索引。它將檢索位於陣列中該位置的項目。 – Silvermind 2012-07-06 13:07:02