4/6学习总结

1.今天先看了一部分关于c++的部分函数用法

find(beg,end,v)//在beg和end内查找等于v的元素,找到返回
  count(beg,end,v)//统计等于v的元素个数
  lower_bound(beg,end,v)//查找非递减序列内第一个大于v的元素
  upper_bound(beg,end,v)//查找非递减序列内第一个小于v的元素

还有就是sort函数,sort(begin,end)如果是这种类型的话,排序的函数就是升序排列,如果想要降序排列则在end后面还要加一个cmp函数变成sort(begin,end,cmp)即可。

bool cmp(int a,int b)
{   return a>b;}

还看见一个使用c++语言的万能头文件,c++目前自己就用这个头文件就可以了简便的多

#include<bits/stdc++.h>
using namespace std;

还有对于c++而言数据结构的一些内容也简化了很多,就像栈队列,什么的c++可以直接进行调用和应用。还掌握到一个小知识点,堆总是一棵完全二叉树。

2.还复习了一下昨天看的dfs,现在的话对dfs的感觉更好了一点,昨天的题目是无向图而今天用dfs

做了一个最短路径感觉还行。

#include<bitsdc++.h>
using namespace std;
int e[1000][1000],book[1000]={0},s=9999,n,m;
void dfs(int cur,int dis)
{
  if(dis>s){return;}
  if(cur==n)
  {
      if(dis<s){s=dis;}
      return;
  }
  for(int i=1;i<=n;i++)
  {
    if(e[cur][i]!=9999&&book[i]==0)
    {
      book[i]=1;
      dfs(i,dis+e[cur][i]);
      book[i]=0;
    }
  }
  return;
}
int main()
{
  int i,j,k,a,b,c;
  cin>>n>>m;
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
  {
    if(i==j){e[i][j]=0;}
    else {e[i][j]=9999;}
  }
  for(i=1;i<=m;i++)
  {
    cin>>a>>b>>c;
    e[a][b]=c;
  }
  book[1]=1;
  dfs(1,0);
  cout<<s;

感觉这里需要注意的唯一一点就是dfs算法中那个判断dis和s大小时的情况应该放在cur==n的情况内,当时自己写完后一直没检查出来,看书才发现。

3.今天除了用dfs写了最短路径也去学了一下dijkstra算法,大概是看懂了,但是实操起来还是不太熟练,明天务必好好复习一下,多写几遍。

#include<bitsdc++.h>
using namespace std;
int main()
{
  int e[100][100],i,j,k,n,m,dis[10],book[10],u,v,a,b,c,s=9999;
  int min1;
  cin>>n>>m;
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
  {
    if(i==j){e[i][j]=0;}
    else e[i][j]=s;
  }
  for(i=1;i<=m;i++)
  {
    cin>>a>>b>>c;
    e[a][b]=c;
  }
  for(i=1;i<=n;i++)
  {
    dis[i]=e[1][i];
  }
  for(i=1;i<=n;i++)
  {
    book[i]=0;
  }
  book[1]=1;
  for(i=1;i<=n-1;i++)
  { min1=s;
  for(j=1;j<=n;j++)
  {
    if(book[j]==0&&dis[j]<min1)
    {
      min1=dis[j];u=j;
    }
  }
  book[u]=1;
  for(v=1;v<=n;v++)
  {
    if(e[u][v]<s)
    {
      if(dis[v]>dis[u]+e[u][v])
        dis[v]=dis[u]+e[u][v];
    }
  }
  }
 cout<<dis[n];
  getchar();getchar();
  return 0;
}

今天写dijkstra算法时,写完检查错误检查了将近几十分钟,看了很多遍都没看出问题,甚至对着书检查都没检查出来,最后发现是双循环的时候两个循环参数都用的i,直接裂开了,这种简单的错误检查了十几二十分钟都没看出来,以后务必牢记!!!

今天由于感冒自习状态太差,效率太低,还需好好调整,之后把自习效率提上来,不能每次都学这么一点点东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值