版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LZUwujiajun/article/details/81414432
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> pre[100];
int n,G[100][100],d[100],vis[100] = {0},s;
int INF = 1e8;
void dij(int s){
fill(d,d+100,INF);
d[0] = 0;
for(int i = 0;i < n;i++){
int u = -1,MIN = INF;
for(int j = 0;j <n;j++){
if(vis[j] == 0 && d[j] < MIN){
MIN = d[j];
u = j;
}
}
if(u == -1) return;
vis[u] = 1;
for(int v = 0;v < n;v++){
if(vis[v] == 0 && G[u][v] != INF){
if(d[u]+G[u][v] < d[v]){
d[v] = d[u]+G[u][v];
pre[v].clear();
pre[v].push_back(u);
}else if(d[u] + G[u][v] == d[v]){
pre[v].push_back(u);
}
}
}
}
}
int opt;
vector<int> path,temp;
void DFS(int v){
if(v == s){
temp.push_back(v);
int value;
//计算value
if("value优于opt"){
opt = value;
path = temp;
}
temp.pop_back();
return;
}
temp.push_back(v);
for(int i = 0;i < pre[v].size();i++){
DFS(pre[v][i]);
}
temp.pop_back();
}