城市地图

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 }



猜你喜欢

转载自www.cnblogs.com/fate-/p/12242205.html