算法总结-Dijkstra+DFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}

猜你喜欢

转载自blog.csdn.net/LZUwujiajun/article/details/81414432