//在图上寻找最优(步数最少)路径
Node bestPath[MAX_LEN];
int minSteps = INFINITE; //最优路径步数(定了一个无限大)
Node psth[MAX_LEN]; //MAX_LEN取节点总数即可
int depth;
void Dfs(V) {
if(v为终点) {
path[depth] = v;
if(depth < minSteps) {
minSteps = depth;
拷贝path到bestSteps;
}
return;
}
if(v为旧点) return;
if(depth >= minSteps) return; //最优性剪枝,它记录当前得到的最优值,如果当前节点无法产生比当前最优解更优的解时,可提前回溯
将V标记为旧点;
path[depth] = v;
++depth;
对和v相邻的每个节点U {
Dfs(U);
}
--depth;
将v恢复成新点;
}
int main() {
将所有点都标记为新点;
depth = 0;
Dfs(起点);
if(minSteps != INFINITE) {
for(int i = 0; i < minSteps; ++i)
cout << bestSteps[i] << endl;
}
}
在图上寻找最优路径(DFS)
最新推荐文章于 2024-01-10 08:26:22 发布