• 外校培训前三节课知识集合纲要(我才不会告诉你我前两节只是单纯的忘了)


    day 1{

    一大堆学习方法及规划(其中告诉我可以无所忌惮的看题解哦)

    1广搜bfs {

    重点:  参照---马的遍历bfs{

    记得判重(不同于spfa)

    模板:

    #include <queue>
     
    queue < int > q;
     
    int main()

    q.push( s ) , vis[s] = 1; 

    while( !q.empty() )  //队列不为空时

      {  

    int now = q.front();   //取出当前元素

    q.pop(); //弹出当前元素

      for( register int i = 0 ; i < linker[ now ].size() ; i++ ) //链式前向星写法(可用vector) 3   :-----4-----6-----7----9

          {    

    int cur = linker[ now ][i];取出某个起点后所连接(跟随)的一系列点(fans)    

    if( !vis[ cur ] )   vis[ cur ] = 1 , q.push( cur ); 若这个点未遍历(判重)(区别于spfa) 这个点扔到队列里面

          } 

      }

    }

    //具体请见马的遍历

    2链表(vector写法)和链式前向星(不是特别会写)

    用vector实现邻接表的建图
    一、vector 简介及基本操作:

    1、vector是c++中stl库中封装好的容器,常用定义不定长数组来构建无向图或有向图

    . 2、基本操作:

    (1)头文件#include<vector>.
     
    (2)创建vector对象,vector<int> vec;
     
    (3)尾部插入数字:vec.push_back(a);
     
    (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
     
    (5)使用迭代器访问元素. vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++)     cout<<*it<<endl;
     
    (6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
     
    (7)删除元素:   vec.erase(vec.begin()+2);删除第3个元素 vec.erase(vec.begin()+i,vec.end()+j)删除区间[i,j-1];区间从0开始
     
    (8)向量大小:vec.size();
     
    (9)清空:vec.clear(); vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的, 否则会出错。
     
    vector实现:vector[x].push_back(y);//把y扔到x后面去;

    day2 {

    1最短路算法{

      一般最短路 floyd(n^3){

    思想:区间dp;

    模板{

    for(int k=1;k<=n;k++)//遍历中转站

    {

    for(int i=1;i<=n;i++)//遍历起点{

    for(int j=1;j<=n;j++){//遍历终点

      if(i!=j&&i!=k&&j!=k&&f[i][j]>f[i][k]+f[k][j]) //i=j值为0,i=k或j=k时中转站是他自身无意义

    f[i][j]=f[i][k]+f[k][j];

    }

    }

    }

    当然这个也可以用来做刚开始图的个点之间是否可以走的存储

    for(int k=1;k<=n;k++)//遍历中转站

    {

    for(int i=1;i<=n;i++)//遍历起点{

    for(int j=1;j<=n;j++){//遍历终点

      if(i!=j&&i!=k&&j!=k) //i=j值为0,i=k或j=k时中转站是他自身无意义

    f[i][j]=(f[i][k]&&f[k][j])||f[i][j];

    }

    }

    }

    Bellman-Ford算法O(NE)

    模板:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
     // 此算法实际上就是一点点靠近真理(最优解)的过程,n为点的个数,m为边的个数
    for(int i=1;i<=n;i++){
    dis[i]=inf;  //所谓dis[i],就是起点到i之间的最短距离
    } //全部设为无限大 即所有点现在还都是白点 ,都还未开通
    dis[1]=0;//起点肯定是红点 起点到起点距离肯定为0
    for(int i=1;i<=n-1;i++){//最不好理解的地方 最坏就是一条直线,一次只能优化一个点到起点距离,即n-1次,不懂可以接着往下看
     for(int j=1;j<=m;j++){ //注意 在bellman-fort中 遍历的是边不是点
      int x=u[j],y=v[j];//x为一条边j的初始点,y为一条边j的终点
      if(dis[x]<inf){//一条边的初始点必须与起点相连,这样才能保证遍历优化其他点到起点的距离
      //但是如果dis[x]不是最优解,那么他所优化的其他点也都不是最优解!!!!!
       dis[y]=min(dis[y],dis[x]+w[j]);//管他的,先优化了再说(局部优化)
      }
      //很明显 在一次操作中,所有从起点到与红点相邻的边的终点的值都被优化了一遍,但还没有完
      //新的白点变为了红点 所以要继续优化;(或许可以更好哦)
      //反正遍历的是边,所有东西都是在一点点的局部优化中所最终优化的 (怪不得很浪费)
      //所以说只要知道要最多进行多少次优化(n-1),优化什么(各点到起点最短距离)
      //变量是什么(不断被优化的个边之间的距离)!!
      //也许当初并不完美,也许之前得出的结论都是错的
       //也要有追寻真理的执着
       //让一个min来不断优化基础,从而改正错误吧
      //一个min行天下 
     }
    }

    return 0;
    }

    剩下的两个再翻一篇吧

    原绿色洒满天际
  • 相关阅读:
    Data truncation: Out of range value for column 'quanity' at row 问题解决方案
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    集合源码分析[3]-ArrayList 源码分析
    集合源码分析[2]-AbstractList 源码分析
    IDEA升级版本后界面出现变小,字体变细的问题解决
    集合源码分析[1]-Collection 源码分析
    kubernetes学习第一篇-k8s安装以及HelloWorld
    shiro多Realm第一次调用不生效问题
    设计模式学习(二)-简单工厂模式
    根据具体的地址解析出对应的地区码
  • 原文地址:https://www.cnblogs.com/sc-pyt-2021-theworld/p/10046482.html
Copyright © 2020-2023  润新知