zoukankan      html  css  js  c++  java
  • DFS求解两点之间的最短路径

    我们都知道DFS可以求解没有权值(即两点之间的距离是1)的图中两点的最短距离,但是DFS还可以求解含权值的两点的距离最小值

    例子

    输入:

    5 8(n m 分别是点、边的个数)
    1 5(s e 分别是起点与终点)
    1 2 2(接下来是8条边的点、权值)
    1 5 10
    2 3 3
    2 5 7
    3 1 4
    3 4 4
    4 5 5
    5 3 3

    代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int visited[200];
    int n, m,s,e;
    int edges[200][200];
    #define  inf  0x3f3f3f3f
    int mins = inf;
    void dfs(int cru,int dis)
    {
        if (dis > mins)return;
        if (cru == e)
        {
            if (dis < mins)mins = dis;
            return;
        }
        for (int j = 1; j <= n; j++)
        {
            if (edges[cru][j] != inf&&!visited[j])
            {
                visited[j] = 1;
                dfs(j, dis + edges[cru][j]);
                visited[j] = 0;
            }
        }
        return;
    }
    int main()
    {
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        std::cout.tie(0);
        cin >> n >> m;
        cin >> s >> e;
        fill(edges[0], edges[0] + 200 * 200, inf);
        for (int i = 0; i < m; i++)
        {
            int a, b,c;
            cin >> a >> b>>c;
            edges[a][b] = c;
        }
        visited[s] = 1;
        dfs(s, 0);
        cout << mins;
    }
    
    //5 8
    //1 5
    //1 2 2
    //1 5 10
    //2 3 3
    //2 5 7
    //3 1 4
    //3 4 4
    //4 5 5
    //5 3 3

     

     参考:《啊哈算法》书籍  

  • 相关阅读:
    企业站前端——总结
    visual studio插件 visual assistx
    github 预览html
    Resharper
    c#解析json
    Visual Studio 2015 RC Downloads
    C#位运算讲解与示例
    java 位运算权限管控(转载)
    双机热备
    c# 代码执行时间
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12869950.html
Copyright © 2011-2022 走看看