4/27学习总结

今天复习了一下dfs和dijkstra算法以及浅学了一下java

对于dfs算法来说,如其名depth深度,就相当于搜到底。

今天做的是啊哈算法上的最短路径用的上述两种算法,对于dfs的代码而言如下

#include<bits/stdc++.h>
using namespace std;
int min1=99999;
int q[20][20];
int book[100]={0};
int n,m;
void dfs(int cur,int sum)
{
  int i,j,k;
  if(sum>min1)return;
  if(cur==n){
    if(sum<min1){min1=sum;}
    return;}
  for(j=1;j<=n;j++)
  {
    if(q[cur][j]!=99999&&book[j]==0)
    {
      book[j]=1;
      dfs(j,sum+q[cur][j]);
      book[j]=0;
    }
  }
  return;
}

int main()
{
  int i,j,k,s,a,b,c;
  cin>>n>>m;
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
  {
    if(i==j){q[i][j]=0;}
    else {q[i][j]=99999;}
  }
  while(m--)
  {
    cin>>a>>b>>c;
    q[a][b]=c;
  }
  book[1]=1;
  dfs(1,0);
  cout<<min1<<endl;
  return 0;
}                      

总的来说写出来不难, 需要注意的是这个n和m需要放在全局变量,不然的话在dfs函数中就会将n乱给值导致最后求不出最小路径。关于题的话还是做少了不知道在各个题的用法是否相同,还是得多做。

dijkstra算法的代码如下

#include<bits/stdc++.h>
using namespace std;
int e[100][100],book[100]={0},n,m,min1=9999,dis[10]={0};
int main()
{
  int i,j,k,a,b,c,s,u,v;
  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;
  }
  for(i=1;i<=n;i++)
  {
    dis[i]=e[1][i];
  }

  book[1]=1;
  for(i=1;i<=n-1;i++)
  {
    min1=9999;
    for(j=1;j<=n;j++)
    {
      if(dis[j]<min1&&book[j]==0)
      {
        min1=dis[j];
        u=j;
      }
    }book[u]=1;
      for(v=1;v<=n;v++)
      {
        if(e[u][v]<9999)
        {
          if(dis[v]>e[u][v]+dis[u])
          {
            dis[v]=e[u][v]+dis[u];
          }
        }
      }
  }
  cout<<dis[n];
}

对于此算法就关键点就是将1到个点的位置放在一个dis一维数组上,稍微容易错的地方就是 

 

 此处的e[u][v]数组的判断不能用min1来判断因为在上面循环后min1的值已经被改变了。

对于今天学的java感觉没学啥,写了一个helloworld还不是用编译器弄得还是用记事本,最后还没写出来,没找到错误,痛苦,主要下载了jdk啥的,

 

 这是相应文件目录所对应的一些功能吧,也不知道有啥用,还有就是学了个环境变量,用cmd窗口打开程序更快,正好吧昨天不小心吧qq的窗体标删除了找半天也找不到以后也可以用cmd窗口来打开qq,主要操作方法就是在我的电脑右键打开属性,搜索高级属性设置,点击path将想要打开程序的文件路径复制在里面,即可。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值