ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

暑期第二周总结

2022-07-09 21:31:08  阅读:120  来源: 互联网

标签:总结 return int 暑期 bt 算法 第二周 MAXN key


  这周进行了数据结构的第一阶段。

完成了二叉排序树的查找:

int SearchBST(BSTNode *bt,KeyType k)
{
 
    if(bt==NULL)
    {
        return 0;
    }
    else if(bt->key==k)
    {
        printf("%d ",bt->key);
        return 1;
    }
    else if(bt->key>k)
    { 
        printf("%d ",bt->key);
        return SearchBST(bt->lchild,k);
    }
    else if(bt->key<k)
    {
        printf("%d ",bt->key);
        return SearchBST(bt->rchild,k);
    }
}

还有prime算法的代码实现,之前在学校学习时,只会在草稿纸上画一画,只能理解,并不能实现,这次小学期,通过查询相关资料整了出来

import java.util.Scanner;

public class Main {

    //用来初始化数组的,比结点数大就行
    private static final int MAXN = 1000;
    //INF表示不存在边的长度,用一个很大的数表示它
    private static final int INF = 100000001;

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        //邻接矩阵
        int[][] w = new int[MAXN][MAXN];
        //存放父结点的集合
        int[] f = new int[MAXN];
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= n; j++) {
                int t = s.nextInt();
                w[i][j] = t;
                w[j][i] = t;
            }
        }

        int x = s.nextInt();

        for (int i = 0; i < x; i++) {
            int star = s.nextInt();
            int end = s.nextInt();
            w[star][end] = -1;
            w[end][star] = -1;
        }

        /*for (int i = 1;i <= n;i++){
            for (int j = 1; j <= n;j++){
                System.out.print(w[i][j]+" ");
            }
            System.out.println();
        }*/

        //生成最小生成树
        toPrim(w, f, n);
        int result = 0;
        for(int i = 2; i <= n; i++) {
            //result += w[i-1][f[i]-1];
            if(w[i][f[i]] == -1){
                result += w[i][f[i]] + 1;
                continue;
            }
            result += w[i][f[i]];
        }
        System.out.println(result);
    }

    private static void toPrim(int w[][], int f[], int n) {
        //用于存放结点的权值的集合
        int d[] = new int[MAXN];
        int k = 0;
        int m;

        //第一个结点与其它结点的权值加入集合中
        for(int j = 1; j <= n; j++) {
            d[j] = (j == 1 ? 0 : w[1][j]);
            //第一个结点没有父结点,初始化为1
            f[j] = 1;
        }
        //从第二个结点开始
        for(int i = 2; i <= n; i++) {
            m = INF;
            //遍历与当前结点相连接的各个结点的权值并找出具有最小权值的结点
            for(int j = 1; j <= n; j++) {
                if(d[j] <= m && d[j] != 0) {
                    m = d[j];
                    k = j;
                }
            }
            //将上面找到的结点加入到集合中
            d[k] = 0;
            //更新父d[],将k结点与其它结点连接的最小权值放进d[j]中
            for(int j = 1; j <= n; j++) {
                if(d[j] > w[k][j] && d[j] != 0) {
                    d[j] = w[k][j];
                    f[j] = k;
                    //System.out.println(d[j]);
                }
            }
            //System.out.println(d.length);
        }
    }
}

  

通过完成这一阶段的任务,我深深体会到了算法的重要性,也体会到了算法的难学,数据结构上学期学完之后自己就没有在复习过,平常写系统的时候一般也不会用到算法,所以相当于半年没有碰算法,在做题目的时候,很多算法知识都忘记了,甚至不知道它的核心思想,更不要说写代码了。在做题目的过程中,我使用了C++和vs2022作为我的工具,vs2022对于一些代码的书写有规定,对于scanf需要写成s_scanf,这些让人很不适应。写完代码之后,我发现c++中数组和结构体的使用频率较高,所以要充分认识数组下标和其值得对应关系。

题目写完之后,我充分认识到了自己的不足,同时,自己对于算法的重视程度也不够,在即将到来的暑假我应该对算法进行复习,同时也为自己做好规划,充分使用算法网站,弥补自己的不足,提升自己的能力。

 

标签:总结,return,int,暑期,bt,算法,第二周,MAXN,key
来源: https://www.cnblogs.com/tk203/p/16461914.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有