您的位置:首页 > 其它

在图上寻找最优路径(DFS)

2018-03-07 20:04 253 查看
//在图上寻找最优(步数最少)路径

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: