• 城市地图


    Description

    暑假小哼想到去小哈家里去玩,小哼和小哈住在不同的城市,并且小哼之前从来没有去过小哈家,这是小哼第一次上门。怎么办呢?小哼便想起了百度地图。百度地图一下子就给出了从小哼家到小哈家的最短行车方案。爱思考的小哼想知道百度地图是如何计算出最短行车距离的。下面是城市的地图:

    Input

    输入是这样的:

    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

    第一行的5表示5个城市,8表示8条公路。
    接下来8行每行3个数a,b,c,表示城市a到城市b有一条长为c的路。(注意是单程的)。

    Output

    输出小哼(1号点)到小哈(5号点)的最短路程

    Sample Input

    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
    

    Sample Output

    9
    

     1 #include<iostream>
     2 #define inf 0x3f3f3f3f 
     3 using namespace std;
     4 int n,m;
     5 int mina=inf;
     6 int book[102],e[103][103];
     7 void dfs(int cur ,int loc){
     8     if(cur==5)//如果到达了5号城市 
     9         mina=min(mina,loc);//用此时的总路程与最小路程作比较,选最小的 
    10     for(int i=1;i<=n;i++){//看看当前城市与其他城市的关系 
    11         if(e[cur][i]!=inf&&book[i]==0){//如果当前城市与一个城市之间有路,并且这个城市没有去过 
    12             book[i]=1;//那就进入这个城市,标记这个城市 
    13             dfs(i,loc+e[cur][i]);//再以这个城市为中心进行搜索 
    14             book[i]=0;//回溯后,取消标记。 
    15         }
    16     }
    17 }
    18 int main(){
    19     cin>>n>>m;
    20     for(int i=1;i<=n;i++){//初始化存储图的二维数组 
    21         for(int j=1;j<=n;j++){
    22             if(i==j)
    23                 e[i][j]=0;
    24             else    
    25                 e[i][j]=inf;    
    26         }
    27     }
    28     for(int i=1;i<=m;i++){//录入图的信息 
    29         int a,b,c;
    30         cin>>a>>b>>c;
    31         e[a][b]=c;
    32     }
    33     book[1]=1;//标记1号点 
    34     dfs(1,0);//从1号点开始搜索 
    35     cout<<mina;
    36     return 0;
    37 }



  • 相关阅读:
    最长公共子序列
    小测试 炒书
    洛谷P1968 美元汇率
    洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈
    【刷题】【树】【模拟】树网的核
    【刷题】【dp】地精的贸易
    【刷题】【模拟】复制cs
    【刷题】【模拟】3n+1
    【刷题】【dp】中国象棋
    【刷题】【搜索】新数独
  • 原文地址:https://www.cnblogs.com/fate-/p/12242205.html
Copyright © 2020-2023  润新知