数据结构与算法大作业:走迷宫程序(实验报告)

Posted 养肥胖虎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法大作业:走迷宫程序(实验报告)相关的知识,希望对你有一定的参考价值。

好家伙,本篇为应付老师的实验报告,有需要的拿去抄吧

 

思路讲解在上一篇:

数据结构与算法大作业:走迷宫程序(C,代码以及思路)

 

一、作业目的

1、 掌握用数据结构的知识进行程序设计。

2、 应用所学的数据结构完成一个具有一定实际意义的应用程序的设计、编码、调试,锻炼实践动手能力,提高编程水平。

二、作业内容

走迷宫程序

问题描述

以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。

基本要求

(1) 实现一个以链表做存储的栈类型, 然后编写一个求解迷宫的非递归程序。 求的通路以三元组(i, j, d) 的形式输出, 其中:(i, j) 指示迷宫中的一个坐标, d 表示走到下一坐标的方向。 如: 对于下列数据的迷宫, 输出一条通路:

(1, 1, 1),(1, 2, 2),
(2, 2, 2),(3, 2, 3),(3, 1, 2) ……。

(2) 编写递归形式的算法, 求得迷宫中所有可能的道路;

扩展功能要求:

以方阵形式输出迷宫及其到道路

测试数据: 迷宫的测试数据如下: 左上角(1, 1) 为入口, 右下角(8, 9) 为出口。

 

三、大作业设计思路与实现

(一)设计背景

迷宫是一个十分经典且有趣的游戏,借着本次大作业的机会,在锻炼自身编程水平的同时还原这一经典游戏。在未确定路径是进次尝试最终找到通路。

(二)、解决方案设计

1、系统操作需求

本程序使用windows 10 操作系统下,程序在 Devc++或Visual C++中运行的。

2、开发环境需求

    硬件环境

笔记本电脑,运行时所需内存:1G

软件环境

操作系统:windows 10

3.功能介绍

(1)迷宫游戏是非常经典的游戏,在该题中设计随机生成一个迷宫和手动输入迷宫2种程序,并求解迷宫。

(2)在程序中,随机迷宫用了随机函数,对方向的随机挖去路径;手动迷宫是通过自己给出迷宫进行输入并给出所有路径。

(3)在求解这两中迷宫是个有些不同。在随机迷宫中,我们让程序自己运行,当入口给定时,会让程序自己跑动,迷宫的路径和出口是随机的,这时只有一条路径;而手动输入迷宫时,如果一个通道其四面都有通道时,这时就会形成一个回路,其基本是一样的,就是多了一个来回而已。

(4)用图形进行展示,其迷宫大小可以调试。

(5)在多条路径的情况下,程序会自动生成最短的路径

 

(三)、程序概要设计

1.各种功能完成的详细情况已经实现以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。

 

2. 实现一个以链表做存储的栈类型, 然后编写一个求解迷宫的非递归程序。 求的通路以三元组(i, j, d) 的形式输出, 其中:(i, j) 指示迷宫中的一个坐标, d 表示走到下一坐标的方向。 如: 对于下列数据的迷宫, 输出一条通路:

(1, 1, 1),(1, 2, 2),
(2, 2, 2),(3, 2, 3),(3, 1, 2) ……。

 

3. 编写递归形式的算法, 求得迷宫中所有可能的道路;

(四)、系统用例设计和流程图

系统流程图:

 

 

a)      程序详细设计:各种功能的实现方法描述、关键代码分析

问题分析:迷宫求解

这种迷宫求解的问题非常适合使用搜索来求解

此处我们使用深度优先搜索算法去求出迷宫的解,当一条支路完成时,我们将整条完整的路径输出

 

关键代码分析

1.栈的几种基本操作:

//栈中存位置以及遍历时所走的方向,打印时可以显示出来

typedef struct Node

    int x;

    int y;

    //  int dir;           //-1为左上右下对应 \'\\\' 0为上下对应\'|\'  1为左右对应\'——\' 2为左下右上对应\'/\'

    struct Node *next;

Node;

 

typedef Node* Stack;     //定义数据结构栈 Stack

 

//-----------创建一个空栈--------------

Stack creakEmptyStack()

    Stack p;

    p=(Stack)malloc(sizeof(Node));    //申请一个空间

    if(p)

        p->next=NULL;

        return p;

   

 

 

//------------将元素压入栈----------------

void push(int x,int y,Stack s)

    Stack p;

    p=(Stack)malloc(sizeof(Node));

    if(p)                   //如果申请空间成功则用头插法将元素压入

        p->x=x;

        p->y=y;

        if(!s->next) p->next=NULL;  //如果此时栈里还没有任何元素,则p此时为第一个结点

        else p->next=s->next;  //否则将p插入头结点之后

        s->next=p;

   

    else

        printf("No space!\\n");

   

 

//-------------检测栈是否为空--------------

int isEmpty(Stack s)           //为空则返回1,不为空返回0

    if(s->next==NULL) return 1;

    else return 0;

//--------------将元素弹出栈----------------

void pop(Stack s)

    Stack p;

    p=s->next;

    if(p->next)

        s->next=p->next;

        free(p);

   

    else return;

//------------取栈顶元素------------------

Node top(Stack s)

    Node t;

    //判断是否为空,若不为空则返回

    t=*(s->next);

    return t;

解释:此处我们使用栈来储存我们迷宫的解,上述代码定义了一系列的

 

2.核心算法:

此处我们使用深度优先搜索去求出迷宫的解\\

代码如下

//-----------遍历迷宫寻找路径(dfs)------------

void mazePath(int x,int y,int endx,int endy,int n,int m,Stack s)

    int newx,newy,i;

    Node t;

    for(i=0;i<4;i++)

        newx=x+direction[i][0];

        newy=y+direction[i][1];

        if(newx>=0&&newx<n&&newy>=0&&newy<m&&maze[newx][newy]==0)    //下一个路能走

            push(newx,newy,s);

            maze[newx][newy]=2;

            if(newx==endx&&newy==endy)//走到出口

                flag++;

                printPath(s,n,m);

                maze[newx][newy]=0;

                pop(s);

           

            else

                mazePath(newx,newy,endx,endy,n,m,s); //开始递归

           

       

//        else if(!isEmpty(s)) pop(s);

   

    maze[x][y]=0;   //遍历完四个方向之后回溯前将自己赋为空

    pop(s);

解释如下:

在该方法中,xy代表的是当前坐标的xy轴,newx,newy代表的是下一坐标点的xy轴坐标,

随后我们对坐标进行判断,

2.1.若下一坐标点为1,则进行下一个方向的寻找

2.2.若下一个坐标为0且不越界

则将下一坐标推入栈,并将该点标记为已走(即标记为2)

再次进行判断

2.2.1. 如果下一坐标为出口

打印整个路径

2.2.2.下一坐标不为出口

递归

流程图如下:

 

3.打印迷宫路径

//-------------打印迷宫路径-----------------

void printPath(Stack s,int n,int m)

    int cont =0;    //计算路径长度

    s=s->next;

    int i=0,j=0;

    printf("第%d条路径为:\\n",flag);

    for(i=0;i<n;i++)                         //按图形输出

        for(j=0;j<m;j++)

            if(maze[i][j]==2) printf("*  ");

            else printf("%d  ",maze[i][j]);

       

        printf("\\n");

   

    while(s->next)                          //将栈中的元素输出为直观路径

        printf("(%d,%d)->",s->x+1,s->y+1);

        s=s->next;

        cont++;

   

    printf("(%d,%d)",s->x+1,s->y+1);

    cont++;

    if(cont<MIN) MIN=cont;

    printf("\\n");

    printf("路径长度为:%d\\n\\n",cont);

解释:将栈中的路径输出

 

b)   使用情况:展示各种功能的运行情况

样例一:手动输入迷宫正常使用程序:

首先输入迷宫的行数和列数

随后输入迷宫的各行各列

其中0代表路,1代表墙

 

 

随后程序会显示迷宫的大致样式

并给出迷宫道路的解

输入样例:

3 3

1

0 0 0

1 0 0

1 1 0

 

1 1 3 3

输出:

生成的迷宫如下:

0  0  0

1  0  0

1  1  0

请输入起点及终点:

 

第1条路径为:

*  *  *

1  0  *

1  1  *

(3,3)->(2,3)->(1,3)->(1,2)

路径长度为:4

 

第2条路径为:

*  *  0

1  *  *

1  1  *

(3,3)->(2,3)->(2,2)->(1,2)

路径长度为:4

 

 

 

样例二:随机生成迷宫

 

 

输入:

2 2

0

2 1 2 2

输出:

第1条路径为:

1  1

*  *

(2,2)

路径长度为:1

最短路径长度为:1

c)      总结:分析程序的优点和不足、开发时遇到的困难及解决的问题、总结。

开发时遇到的问题:算法不会用,栈的操作总是出错,随后去找百度搜索,翻书,找到解决问题的方法

作为一名初学者,我对深度优先搜索算法的使用进行了研究,并通过实践掌握了它的一些使用心得。深度优先搜索算法可以解决很多问题,如最短路径、迷宫问题、图着色问题等,因此学会使用深度优先搜索算法是非常有益的。

首先,我认为理解深度优先搜索算法的核心思想是非常重要的。深

在使用广度优先算法解决问题时,我发现栈的使用非常重要。

最后,我深刻认识到广度优先搜索算法的局限性。尽管广度优先搜索算法可以解决很多问题,但有些问题并不适用于该算法。例如,当搜索的节点数量非常大时,算法的时间和空间复杂度会变得非常高。因此,在使用广度优先搜索算法解决问题时,需要注意算法的局限性,并选择最适合当前问题的算法。

总之,通过对广度优先搜索算法的研究和实践,我认为理解其核心思想、正确选择数据结构、考虑时间和空间限制、深入了解其局限性等方面都是非常重要的。广度优先算法可以解决很多问题,但在实践过程中可能会遇到各种问题。如果我们能够在使用广度优先搜索算法时思考这些问题,并做出正确的决策,那么我们就能够更好地应用广度优先搜索算法,解决更多更复杂的问题。

关于本次的迷宫问题,我认为深度优先搜索是非常好的算法

 

d)     参考文献。

 

[1]严蔚敏.数据结构C语言版[M].清华大学出版社,2007.

[2] 啊哈磊, 《啊哈!算法》, 人民邮电出版社,2014

[3]百度百科 https://baike.baidu.com/

[4] 栈——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)-CSDN博客,https://blog.csdn.net/weixin_44162361/article/details/115868909

[5]BFS(广度优先搜索):层序遍历和最短路径 - 灿影之晶 - 博客园 (cnblogs.com),https://www.cnblogs.com/sbb-first-blog/p/13259728.html

[6] 深度优先搜索(DFS)算法详解 (biancheng.net), http://data.biancheng.net/view/325.html

 

 

一、作业目的

1、掌握用数据结构的知识进行程序设计。

2、应用所学的数据结构完成一个具有一定实际意义的应用程序的设计、编码、调试,锻炼实践动手能力,提高编程水平。

二、作业内容

走迷宫程序

问题描述

以一个 m * n 的长方阵表示迷宫, 01分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。

基本要求

1) 实现一个以链表做存储的栈类型, 然后编写一个求解迷宫的非递归程序。 求的通路以三元组(i j d) 的形式输出, 其中:(i j) 指示迷宫中的一个坐标, d 表示走到下一坐标的方向。 如: 对于下列数据的迷宫, 输出一条通路:

1 1 1),(1 2 2),
2 2 2),(3 2 3),(3 1 2) ……。

2) 编写递归形式的算法, 求得迷宫中所有可能的道路;

扩展功能要求:

以方阵形式输出迷宫及其到道路

测试数据:迷宫的测试数据如下:左上角(1 1为入口,右下角(8 9为出口。

三、大作业设计思路与实现

(一)设计背景

迷宫是一个十分经典且有趣的游戏,借着本次大作业的机会,在锻炼自身编程水平的同时还原这一经典游戏。在未确定路径是进次尝试最终找到通路。

()、解决方案设计

1、系统操作需求

本程序使用windows 10 操作系统下,程序在 Devc++Visual C++中运行的。

2开发环境需求

    硬件环境

笔记本电脑,运行时所需内存:1G

软件环境

操作系统:windows 10

3.功能介绍

1迷宫游戏是非常经典的游戏,在该题中设计随机生成一个迷宫和手动输入迷宫2种程序,并求解迷宫。

2)在程序中,随机迷宫用了随机函数,对方向的随机挖去路径;手动迷宫是通过自己给出迷宫进行输入并给出所有路径。

3)在求解这两中迷宫是个有些不同。在随机迷宫中,我们让程序自己运行,当入口给定时,会让程序自己跑动,迷宫的路径和出口是随机的,这时只有一条路径;而手动输入迷宫时,如果一个通道其四面都有通道时,这时就会形成一个回路,其基本是一样的,就是多了一个来回而已。

4)用图形进行展示,其迷宫大小可以调试。

(5)在多条路径的情况下,程序会自动生成最短的路径

 

 

 

 

 

 

 

 

()、程序概要设计

1.各种功能完成的详细情况已经实现以一个 m * n 的长方阵表示迷宫, 01分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。

 

2.实现一个以链表做存储的栈类型, 然后编写一个求解迷宫的非递归程序。 求的通路以三元组(i j d) 的形式输出, 其中:(i j) 指示迷宫中的一个坐标, d 表示走到下一坐标的方向。 如: 对于下列数据的迷宫, 输出一条通路:

1 1 1),(1 2 2),
2 2 2),(3 23),(3 1 2 ……

 

3.编写递归形式的算法, 求得迷宫中所有可能的道路;

()、系统用例设计和流程图

系统流程图:

 

a)      程序详细设计:各种功能的实现方法描述、关键代码分析

问题分析:迷宫求解

这种迷宫求解的问题非常适合使用搜索来求解

此处我们使用深度优先搜索算法去求出迷宫的解,当一条支路完成时,我们将整条完整的路径输出

 

关键代码分析

1.栈的几种基本操作:

//栈中存位置以及遍历时所走的方向,打印时可以显示出来

typedef struct Node

    int x;

    int y;

    //  int dir;           //-1为左上右下对应 \'\\\' 0为上下对应\'|\'  1为左右对应\'——\' 2为左下右上对应\'/\'

    struct Node *next;

Node;

 

typedef Node* Stack;     //定义数据结构栈 Stack

 

//-----------创建一个空栈--------------

Stack creakEmptyStack()

    Stack p;

    p=(Stack)malloc(sizeof(Node));    //申请一个空间

    if(p)

        p->next=NULL;

        return p;

   

 

 

//------------将元素压入栈----------------

void push(int x,int y,Stack s)

    Stack p;

    p=(Stack)malloc(sizeof(Node));

    if(p)                   //如果申请空间成功则用头插法将元素压入

        p->x=x;

        p->y=y;

        if(!s->next) p->next=NULL;  //如果此时栈里还没有任何元素,则p此时为第一个结点

        else p->next=s->next;  //否则将p插入头结点之后

        s->next=p;

   

    else

        printf("No space!\\n");

   

 

//-------------检测栈是否为空--------------

int isEmpty(Stack s)           //为空则返回1,不为空返回0

    if(s->next==NULL) return 1;

    else return 0;

//--------------将元素弹出栈----------------

void pop(Stack s)

    Stack p;

    p=s->next;

    if(p->next)

        s->next=p->next;

        free(p);

   

    else return;

//------------取栈顶元素------------------

Node top(Stack s)

    Node t;

    //判断是否为空,若不为空则返回

    t=*(s->next);

    return t;

解释:此处我们使用栈来储存我们迷宫的解,上述代码定义了一系列的

 

2.核心算法:

此处我们使用深度优先搜索去求出迷宫的解\\

代码如下

//-----------遍历迷宫寻找路径(dfs)------------

void mazePath(int x,int y,int endx,int endy,int n,int m,Stack s)

    int newx,newy,i;

    Node t;

    for(i=0;i<4;i++)

        newx=x+direction[i][0];

        newy=y+direction[i][1];

        if(newx>=0&&newx<n&&newy>=0&&newy<m&&maze[newx][newy]==0)    //下一个路能走

            push(newx,newy,s);

            maze[newx][newy]=2;

            if(newx==endx&&newy==endy)//走到出口

                flag++;

                printPath(s,n,m);

                maze[newx][newy]=0;

                pop(s);

           

            else

                mazePath(newx,newy,endx,endy,n,m,s); //开始递归

           

       

//        else if(!isEmpty(s)) pop(s);

   

    maze[x][y]=0;   //遍历完四个方向之后回溯前将自己赋为空

    pop(s);

解释如下:

在该方法中,xy代表的是当前坐标的xy,newx,newy代表的是下一坐标点的xy轴坐标,

随后我们对坐标进行判断,

2.1.若下一坐标点为1,则进行下一个方向的寻找

2.2.若下一个坐标为0且不越界

则将下一坐标推入栈,并将该点标记为已走(即标记为2)

再次进行判断

2.2.1. 如果下一坐标为出口

打印整个路径

2.2.2.下一坐标不为出口

递归

流程图如下:

 

 

 

 

3.打印迷宫路径

//-------------打印迷宫路径-----------------

void printPath(Stack s,int n,int m)

    int cont =0;    //计算路径长度

    s=s->next;

    int i=0,j=0;

    printf("%d条路径为:\\n",flag);

    for(i=0;i<n;i++)                         //按图形输出

        for(j=0;j<m;j++)

            if(maze[i][j]==2) printf("*  ");

            else printf("%d  ",maze[i][j]);

       

        printf("\\n");

   

    while(s->next)                          //将栈中的元素输出为直观路径

        printf("(%d,%d)->",s->x+1,s->y+1);

        s=s->next;

        cont++;

   

    printf("(%d,%d)",s->x+1,s->y+1);

    cont++;

    if(cont<MIN) MIN=cont;

    printf("\\n");

    printf("路径长度为:%d\\n\\n",cont);

解释:将栈中的路径输出

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b)   使用情况:展示各种功能的运行情况

样例一:手动输入迷宫正常使用程序:

首先输入迷宫的行数和列数

随后输入迷宫的各行各列

其中0代表路,1代表墙

随后程序会显示迷宫的大致样式

并给出迷宫道路的解

输入样例:

3 3

1

0 0 0

1 0 0

1 1 0

 

1 1 3 3

输出:

生成的迷宫如下:

0  0  0

1  0  0

1  1  0

请输入起点及终点:

 

1条路径为:

*  *  *

1  0  *

1  1  *

(3,3)->(2,3)->(1,3)->(1,2)

路径长度为:4

 

2条路径为:

*  *  0

1  *  *

1  1  *

(3,3)->(2,3)->(2,2)->(1,2)

路径长度为:4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

样例二:随机生成迷宫

输入:

2 2

0

2 1 2 2

输出:

1条路径为:

1  1

*  *

(2,2)

路径长度为:1

最短路径长度为:1

c)      总结:分析程序的优点和不足、开发时遇到的困难及解决的问题、总结。

开发时遇到的问题:算法不会用,栈的操作总是出错,随后去找百度搜索,翻书,找到解决问题的方法

作为一名初学者,我对深度优先搜索算法的使用进行了研究,并通过实践掌握了它的一些使用心得。深度优先搜索算法可以解决很多问题,如最短路径、迷宫问题、图着色问题等,因此学会使用深度优先搜索算法是非常有益的。

首先,我认为理解深度优先搜索算法的核心思想是非常重要的。深

在使用广度优先算法解决问题时,我发现栈的使用非常重要。

最后,我深刻认识到广度优先搜索算法的局限性。尽管广度优先搜索算法可以解决很多问题,但有些问题并不适用于该算法。例如,当搜索的节点数量非常大时,算法的时间和空间复杂度会变得非常高。因此,在使用广度优先搜索算法解决问题时,需要注意算法的局限性,并选择最适合当前问题的算法。

总之,通过对广度优先搜索算法的研究和实践,我认为理解其核心思想、正确选择数据结构、考虑时间和空间限制、深入了解其局限性等方面都是非常重要的。广度优先算法可以解决很多问题,但在实践过程中可能会遇到各种问题。如果我们能够在使用广度优先搜索算法时思考这些问题,并做出正确的决策,那么我们就能够更好地应用广度优先搜索算法,解决更多更复杂的问题。

关于本次的迷宫问题,我认为深度优先搜索是非常好的算法

 

d)     参考文献。

 

[1]严蔚敏.数据结构C语言版[M].清华大学出版社,2007.

[2] 啊哈磊,《啊哈!算法》, 人民邮电出版社,2014

[3]百度百科 https://baike.baidu.com/

[4] ——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)-CSDN博客,https://blog.csdn.net/weixin_44162361/article/details/115868909

[5]BFS(广度优先搜索):层序遍历和最短路径 - 灿影之晶 - 博客园 (cnblogs.com)https://www.cnblogs.com/sbb-first-blog/p/13259728.html

[6] 深度优先搜索(DFS)算法详解 (biancheng.net),http://data.biancheng.net/view/325.html

 

20162317 2016-2017-2《程序设计与数据结构》课程总结

20162317 2016-2017-2《程序设计与数据结构》课程总结

总目录

每周作业链接汇总

每周作业目录

返回总目录

  • 第一周作业
    • 这一周我们主要学了:
      1. 算法复杂度的定义和计算
      2. 算法和效率的关系
      3. 算法的特点
      4. 时间复杂度和空间复杂度

返回目录
技术分享图片

  • 第二周作业
    • 这一周我们主要学了:
      1. 泛型的使用
      2. 小组对构建之法的总结

返回目录
技术分享图片

  • 第三周作业
    • 这一周我们主要学了:
      1. 查找的方法
      2. 不同查找方法的时间复杂度
      3. 排序的方法
      4. 不同排序方法的时间复杂度

返回目录
技术分享图片

返回目录
技术分享图片

  • 第五周作业
    • 这一周我们主要学了:
      1. 集合
      2. 数组实现栈
      3. 链表实现栈

返回目录
技术分享图片

  • 第六周作业
    • 这一周我们主要学了:
      1. 队列
      2. 数组实现队列
      3. 链表实现队列

返回目录
技术分享图片

  • 第七周作业
    • 这一周我们主要学了:
      1. 树的类型
      2. 数的实现

返回目录
技术分享图片

返回目录
技术分享图片

  • 第九周作业
    • 这一周我们主要学了:
      1. 堆的定义
      2. 堆的作用
      3. 堆的应用
      4. 堆的实现

返回目录
技术分享图片

  • 第十周作业
    • 这一周我们主要学了:
      1. 图的定义
      2. 图的类型
      3. 图的实现

返回目录
技术分享图片

  • 第十一作业
    • 这一周我们主要学了:
      1. 哈希算法的类型
      2. 冲突以及解决冲突
      3. 装载因子

返回目录
技术分享图片

  • 自认为写得最好的一篇博客是?为什么?
  • 答:我认为写得最好的一篇博客是第七周学习总结。原因在于在这一篇我对我的问题做了额外的练习,让我对这一章的知识点印象更为深刻。并且这一章的问题提得比较深刻,解决情况也比较好。

  • 作业中阅读量最高的一篇博客是?谈谈经验
  • 答:作业中阅读量最高的一篇博客是第三周学习总结。我认为这一篇博客之所以能够获得那么多的关注是因为这篇博客是我们开始学数据结构的基础:算法和算法复杂度。在内容上,我结合了课本、PPT以及网上的知识,并将知识体系表格给了出来,比较有参考价值,而且比较详尽,能够比较容易看懂,因此阅读量高。


实验报告链接汇总

实验报告目录

返回总目录

返回目录
技术分享图片

返回目录
技术分享图片

返回目录
技术分享图片

  • 实验四
    • 简要介绍:图的实现与应用

返回目录
技术分享图片

  • 实验五
    • 简要介绍:数据结构的综合应用

返回目录
技术分享图片


团队项目报告链接汇总


技术分享图片

> 本学期目标已达成

技术分享图片

  • 加点代码,改点代码是理解的最好方式,谈谈你的心得
  • 对待一段代码,如果只是读懂,这并不是真正的理解。要试着加点代码,改点代码。加点代码,意味着运用原代码中提供的变量、方法、逻辑来尝试实现新的功能。当且仅当理解代码的人才能够敢加代码。改点代码也是,我们看的原代码也是人敲出来的,这些代码的排布可能不是最优化的。虽然这些代码已经实现了一些功能的实现,解决了需求,但不代表它是最优的。代码中可能存在着垃圾代码,垃圾变量,也可能逻辑不清,绕来绕去,又或者说是零零散散的,不够模块化。根据《编程的智慧》,我们的代码不应该只停留在实现功能上,我们要写出优雅的代码,流畅的代码,模块化的代码,可读的代码。若能够将看的代码优化且不影响原来的作用,这种就是真正地读懂代码。

  • 积极主动敲代码做到没?教材实践上有什么经验教训?
  • 自上个学期自知代码水平不高后,这学期自己便有一定的意识去主动敲代码。有时候一个知识点它可以有不同方面的拓展,这就需要自己积极主动地去设例子,用代码去尝试,因此这学期除了教材上的代码,为了学习知识,积极主动敲的代码也不少。个人感觉这样的学习方法进步很大,拓宽了自己在java中的视野,对某种方法或者是知识点的理解程度更深,记的程度也更深了。教材上的实践让我认识到了,教材中教的毕竟是有限。很多时候教材后的实践需要用到对应章节更深层次的用法,这时就需要我们去网上找该知识点的扩展用法或者是事例。同时,教材上的实践很多都是几个章节的知识点的联动,这时就需要我们对之前学的知识有很好的消化,会用联系的观点去看题目。

返回总目录


课堂项目实践或课后作业

  • 算法复杂度
    • 实践要求:用 Java语言实现下列算法并进行单元测试, 请给出算法的时间复杂度。
    1. 求一个整数二维数组Arr[N][N]的所有元素之和。
    2. 对于输入的任意 3 个整数, 将它们按从小到大的顺序输出。
    3. 对于输入的任意 n 个整数, 输出其中的最大和最小元素。

技术分享图片

  • 仿ArrayList
    • 实践要求:使用Java代码来实现ArrayList中的几个功能:
      • getCountSize():获取列表中存放元素的个数
      • isEmpty():判断列表是否为空
      • add(Object newEntry):往列表中添加元素
      • remove(Object anEntry):移除列表中指定的元素
      • clear():将列表清空
      • getFrequencyOf(Object anEntry):获取数组中某元素的个数
      • contains(Object anEntry):检验某元素是否包含在这列表中

技术分享图片

  • 队列课下作业
    • 实践要求:
      • 用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
      • 用JDB或IDEA单步跟踪排队情况,画出队列变化图

技术分享图片

技术分享图片

技术分享图片

  • 课堂实践对提高应用能力有帮助吗?
    • 我认为非常有,当场的检验是最能考验一个人能力的有效方法。这样可以看出自己平时还有哪些还没完全熟悉,从而可以更好地提高自己的短缺方面。
  • 课堂实践上对自己有什么经验教训?
  • 平时能够做到的在现场检验不一定能够做到,总有一个方面自己还不是很熟悉,总有一个方面自己还有继续提升的空间。因此现场的检验要重视起来,通过课堂实践来更好地进行自我的提高和升值。
  • 课堂实践上对老师有什么教学建议?
    • 方法很好,请继续保持

返回总目录


课堂的收获和不足


问卷调查

















以上是关于数据结构与算法大作业:走迷宫程序(实验报告)的主要内容,如果未能解决你的问题,请参考以下文章

SDUT 2449 数据结构实验之栈与队列十:走迷宫

SDUT-2449_数据结构实验之栈与队列十:走迷宫

数据结构与算法之深入解析“逃离大迷宫”的求解思路与算法示例

[算法与数据结构] 走迷宫问题(广度与深度优先搜索)

数据结构与算法:迷宫回溯和八皇后问题

数据结构与算法—图论(广搜迷宫问题)