實現二維數組的動態行/列插入、指定位置元素交換,並記錄每個元素的位置變化軌跡。
// 位置節點
typedef struct _PathNode {
int x; // 行
int y; // 列
} Node;
// 軌跡鏈表節點(不帶頭節點)
typedef struct _PathNodeList {
Node node;
struct _PathNodeList *pNext;
} PathNodeList;
// 當前有效行列數
typedef struct _CurRowColNum {
int iArrayRow;
int iArrayCol;
} CurRowColNum;
// 二維數組:每個元素對應一個軌跡鏈表
PathNodeList* g_pGrid[MAX_ROW_NUM][MAX_COL_NUM];
InitGrid:為每個有效位置創建初始軌跡節點。DestoryGrid:遞歸釋放所有鏈表內存。SwapNode 交換兩個位置的元素,並將雙方當前位置插入對方軌跡鏈表,實現軌跡記錄。
insertRowtoGrid:若插入位置超出當前有效行,直接在末尾添加;否則先在末尾添加空行,再通過逐行交換將新行移動到目標位置,保證軌跡正確更新。
insertColtoGrid:邏輯同插入行,按列操作。
GetNodePath 返回指定初始位置元素的完整移動軌跡鏈表。
InitGrid(5, 5);
SwapNode((Node){3,4}, (Node){1,1});
insertRowtoGrid(1);
insertColtoGrid(3);
GetNodePath((Node){4,4}, &pList); // 輸出該元素所有歷史位置