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
    */
    

  • 相关阅读:
    Python——6切片
    Python——5函数
    Python——4Dict和Set类型
    C# for循环
    C# while循环
    C#循环结构
    C#判断
    C#运算符
    windows安装IIS不成功的原因
    “未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205237.html
Copyright © 2011-2022 走看看