zoukankan      html  css  js  c++  java
  • DFS求最短路

    题目:城市地图

    输入第一行表示有n个城市,m条马路。

    接下来m行是类似于a b c这样的数据,表示有一条路可以从城市a到b,且路程为c公里。

    需要注意的是这里的路都是单向的,也就是有向图。

    求出1号城市到n号城市的最短距离。


    分析:求最短路可以用DFS,BFS,Dijksrta,Floyed 等算法求解。目前在看图的遍历,就用DFS了。。。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <map>
    #define INF 99999999
    using namespace std;
    const int maxn=105;
    int e[maxn][maxn];
    int vis[maxn];
    int minx=INF;
    int sx,ex;
    int n,m;
    void init(){//初始化
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i==j) e[i][j]=0;//自己到自己的距离为0
                else e[i][j]=INF;//初始为无穷大,说明此事城市i和城市j之间还没有路相通
            }
        }
    }
    void dfs(int now,int step){
        if(step>minx) return ;
        if(now==n){
            if(step<minx){
                minx=step;//更新最短路
            }
            return;
        }
        for(int j=1;j<=n;j++){
            if(e[now][j]!=INF&&!vis[j]){
                vis[j]=1;
                dfs(j,step+e[now][j]);
                vis[j]=0;
            }
        }
        return;
    }
    int main()
    {
        int a,b,c;
        scanf("%d %d",&n,&m);
        init();
        for(int i=1;i<=8;i++){
            scanf("%d %d %d",&a,&b,&c);
            e[a][b]=c;
        }
        memset(vis,0,sizeof vis);
        vis[1]=1;
        dfs(1,0);
        printf("%d
    ",minx);
        return 0;
    }
    /*
    5 8
    1 2 2
    1 5 10
    2 3 3
    2 5 7
    3 1 4
    3 4 4
    4 5 5
    5 3 3
    */
    

  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205237.html
Copyright © 2011-2022 走看看