// 1. 建立索引映射
int LocateVex(MGraph* G, int v) {
for (int i = 0; i < G->vexnum; i++)
if (G->vexs[i] == v) return i;
return -1;
}
// 2. DFS 傳指標,使用索引
void DFS(MGraph* G, int vIdx) {
printf("%d ", G->vexs[vIdx]);
visited[vIdx] = 1;
int wIdx = GetFirstVex(G, vIdx);
while (wIdx != -1) {
if (!visited[wIdx]) DFS(G, wIdx);
wIdx = GetNextVex(G, vIdx, wIdx);
}
}
// 3. GetFirstVex / GetNextVex 使用索引遍歷 arcs[][]
int GetFirstVex(MGraph* G, int vIdx) {
for (int col = 0; col < G->vexnum; col++)
if (G->arcs[vIdx][col] > 0) return col;
return -1;
}
建議參考經典教材或博客範例:C語言圖的深度優先遍歷完整代碼,對照修正上述邏輯錯誤。
核心原則:統一使用 0~n-1 索引操作鄰接矩陣,結構體傳指標,嚴格檢查邊界。