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 }