void PrintAdjacencyList(AMGraph& G) { cout << "地图的邻接表表示如下:" << endl; for (int i = 0; i < G.vexnum; i++) { cout << G.vexs[i] << ": "; bool hasNeighbor = false; for (int j = 0; j < G.vexnum; j++) { if (G.arcs[i][j] != MaxInt && i != j) { if (hasNeighbor) cout << " -> "; cout << G.vexs[j]; hasNeighbor = true; } } cout << endl; } } void Backtrack(AMGraph& G, int currIdx, vector<int>& path, vector<bool>& visited, int& distance) { if (path.size() == G.vexnum && G.arcs[currIdx][0] != MaxInt) { cout << "路径:"; for (int i = 0; i < path.size(); i++) { cout << G.vexs[path[i]] << " "; } cout << G.vexs[0] << endl; cout << "总路程:" << distance + G.arcs[currIdx][0] << endl; return; } for (int i = 0; i < G.vexnum; i++) { if (G.arcs[currIdx][i] != MaxInt && !visited[i]) { path.push_back(i); visited[i] = true; distance += G.arcs[currIdx][i]; Backtrack(G, i, path, visited, distance); path.pop_back(); visited[i] = false; distance -= G.arcs[currIdx][i]; } } }为这段代码加上注释
时间: 2024-02-10 07:15:21 浏览: 24
以下是对给出代码的注释:
```
// 打印邻接表
void PrintAdjacencyList(AMGraph& G) {
cout << "地图的邻接表表示如下:" << endl;
for (int i = 0; i < G.vexnum; i++) {
// 输出当前顶点的名称
cout << G.vexs[i] << ": ";
bool hasNeighbor = false;
for (int j = 0; j < G.vexnum; j++) {
// 如果当前顶点与其他顶点存在边,则输出与之相连的顶点名称
if (G.arcs[i][j] != MaxInt && i != j) {
if (hasNeighbor)
cout << " -> ";
cout << G.vexs[j];
hasNeighbor = true;
}
}
cout << endl;
}
}
// 回溯函数
void Backtrack(AMGraph& G, int currIdx, vector<int>& path, vector<bool>& visited, int& distance) {
// 如果路径已经包含所有的顶点并且最后一个顶点与起点存在边,则输出路径和总路程
if (path.size() == G.vexnum && G.arcs[currIdx][0] != MaxInt) {
cout << "路径:";
for (int i = 0; i < path.size(); i++) {
cout << G.vexs[path[i]] << " ";
}
cout << G.vexs[0] << endl;
cout << "总路程:" << distance + G.arcs[currIdx][0] << endl;
return;
}
// 遍历所有顶点
for (int i = 0; i < G.vexnum; i++) {
// 如果当前顶点与当前顶点存在边且未被访问过,则将该顶点加入路径中
if (G.arcs[currIdx][i] != MaxInt && !visited[i]) {
path.push_back(i);
visited[i] = true;
distance += G.arcs[currIdx][i];
// 递归调用回溯函数,以该顶点为起点,继续寻找下一个顶点
Backtrack(G, i, path, visited, distance);
// 将该顶点从路径中移除,以备下一次遍历
path.pop_back();
visited[i] = false;
distance -= G.arcs[currIdx][i];
}
}
}
```