zoukankan      html  css  js  c++  java
  • 暴力求最短路

    暴力求最短路

    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             vis[v]=false;
    54         }             
    55         
    56     }
    57     
    58 }
    59 
    60 int main(){
    61     freopen("in.txt","r",stdin);
    62     init();
    63     search(1,0,4); 
    64     vis[1]=true;
    65     cout<<minDis<<endl; 
    66     return 0;
    67 } 
    暴力求最短路

    1、想好算法再行动

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

    3、回溯模板

    4、回溯应该写在if里面 

    5、vis[1]=true;//这句话居然在search下面     search(1,0,1); 

  • 相关阅读:
    python模板引擎Cheetah的安装
    cocos2d 动作
    【leetcode】合并两个有序数组
    【leetcode】合并二叉树
    【leetcode】合并两个有序链表
    【leetcode】链表的中间结点
    【leetcode】使用最小花费爬楼梯
    【leetcode】栈的最小值
    【leetcode】最小绝对差
    【leetcode】玩筹码
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7531544.html
Copyright © 2011-2022 走看看