码迷,mamicode.com
首页 > 其他好文 > 详细

暴力求最短路

时间:2017-09-16 17:19:43      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:blog   stdin   最短路   back   style   log   tar   ffffff   space   

暴力求最短路

技术分享

5 7
1 2 2
2 5 2
1 3 4
1 4 7
3 4 1
2 3 1
3 5 6

 

思路:

求1-5的最短距离
找所有1可以直接到达的点,从这些点再去找5,并且记录我现在已经走了的长度
如果找打5,就比较最短路
输出最短路的最优值
在某条路中,点被走过,就不能再走了

技术分享
 1 #include <bits/stdc++.h>
 2 #define INFINITE 0x3fffffff
 3 using namespace std;
 4 struct node{
 5     int v;
 6     int w;
 7     node(int v,int w){
 8         this->v=v;
 9         this->w=w;
10     } 
11 };
12 vector<node> vec[100];
13 int edgeNum[100];
14 int n,m;
15 bool vis[100];
16 int minDis=INFINITE;
17 
18 void addEdge(int u,int v,int w){
19     edgeNum[u]++;
20     vec[u].push_back(node(v,w));
21 }
22 
23 void init(){
24     cin>>n>>m;
25     for(int i=1;i<=m;i++){
26         int u,v,w;
27         cin>>u>>v>>w;
28         addEdge(u,v,w);
29         addEdge(v,u,w);
30     }
31 }
32 
33 //求1-5的最短距离
34 //找所有1可以直接到达的点,从这些点再去找5,并且记录我现在已经走了的长度
35 //如果找打5,就比较最短路
36 //输出最短路的最优值
37 //在某条路中,点被走过,就不能再走了 
38 void search(int start,int dis,int end){
39     if(dis>=minDis) return ;//最优化剪枝 
40     
41     if(start==end){
42         //检查错误,这一句话就够了 
43         //cout<<dis<<endl; 
44         if(dis<minDis) minDis=dis;
45         return ;
46     }    
47     for(int i=0;i<edgeNum[start];i++){
48         int v=vec[start][i].v;
49         int w=vec[start][i].w;
50         if(!vis[v]){
51             vis[v]=true;
52             search(v,dis+w,end);
53         }             
54         vis[v]=false;
55     }
56     
57 }
58 
59 int main(){
60     freopen("in.txt","r",stdin);
61     init();
62     search(1,0,4); 
63     vis[1]=true;
64     cout<<minDis<<endl; 
65     return 0;
66 } 
暴力求最短路

1、想好算法再行动

2、检查错误,关键位置的一句话就够了,要机智

3、回溯模板

 

暴力求最短路

标签:blog   stdin   最短路   back   style   log   tar   ffffff   space   

原文地址:http://www.cnblogs.com/Renyi-Fan/p/7531544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!