C语言与数据结构课程设计报告

最美的痕迹叫做回忆 范文 报告范文
精选回答

C语言与数据结构课程设计报告本文简介:C语言与数据结构课程设计报告学号2011013759姓名俞杰课程设计题目迷宫求解小组成员俞杰安飞洪飞2012年12月目录1需求分析1.1功能与数据需求1.1.1题目要求的功能1.1.2扩展功能1.2界面需求1.3开发环境与运行需求2概要设计2.1主要数据结构2.2程序总体结构2.3各模块函数说明3详

C语言与数据结构课程设计报告本文内容:

C语言与数据结构课程设计报告

2011013759

俞杰

课程设计题目

迷宫求解

小组成员

俞杰

安飞

洪飞

2012

12

1

需求分析

1.1

功能与数据需求

1.1.1

题目要求的功能

1.1.2

扩展功能

1.2

界面需求

1.3

开发环境与运行需求

2

概要设计

2.1主要数据结构

2.2程序总体结构

2.3各模块函数说明

3

详细设计

3.1算法分析与设计

3.2主要程序段设计

4

测试

5

使用说明

5.1应用程序功能的详细说明

5.2应用程序运行环境要求

5.5输入数据类型、格式和内容限制

6

总结提高

6.1课程设计总结

6.2开发中遇到的问题和解决方法

6.3

对自己完成课设完成情况的评价

6.4《C语言与数据结构课程设计》课程的意见与建议

附录:程序源代码

1

需求分析

1.1

功能与数据需求

1.1.1

题目要求的功能

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

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

0

0

1

0

0

0

1

0

0

0

1

0

0

0

1

0

0

0

0

0

1

1

0

1

0

1

1

1

0

0

1

0

0

0

0

1

0

0

0

0

0

1

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

1

0

0

0

1

0

1

1

1

0

0

0

0

0

0

1

2

3

4

5

6

7

8

1.1.2

扩展功能

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

(2)以方阵形式输出迷宫及其通路。

1.2

界面需求

输入行数和列数

输入每一行中的通路(0,0)和障碍(1,1).

输入入口坐标(1,1)和出口坐标(m,n).

1.3

开发环境与运行需求

开发环境

Microsoft

Visual

C++

6.0

最低运行需求

windows

xp

;32位系统

2

概要设计

2.1主要数据结构:

typedef

struct

/*用于存放迷宫的位置和该点信息*/

{

int

x,y,d;

}Datatype;

typedef

struct

/*该栈用于存储走过的结点*/

{

Datatype

data[MAXSIZE];

int

top;

}Sqstack,*PSqstack;

typedef

struct

/*用于存放当前结点可走的四个方向*/

{

int

x,y;

}item;

2.2程序总体结构

输入起始位置,终点位置

判断首节点是否为通路

判断路径能否走通

对坐标标记

是否到达迷宫出口处

南边是否存在通路

东边是否存在通路

北边是否存在通路

存储路径,将路径入栈

有解迷宫

无解迷宫

Y

N

Y

N

Y

输出迷宫

选择路径

西边是否存在通路

打印所走的路径

2.3各模块函数说明

PSqstack

Init_Sqstack()

/*初始化空栈*/

int

Push_Sqstack(PSqstack

s,Datatype

x)

/*入栈*/

int

Pop_Sqstack(PSqstack

s,Datatypex)

/*出栈*/

void

Destroy_Sqstack(PSqstacks)

/*销毁栈*/

int

Mazepath(int

maze[][n+2],int

x0,int

y0)

/*求迷宫路径函数,入口参数:

指向迷宫数组的指针,开始点(x0,y0)*/

Pop_

Sqstack(s,Push_Sqstack(t,temp);

/*栈t是栈s的逆,因为s保存

的途径是反的,加t

使输出的途径变为正*/

3

详细设计

3.1算法分析与设计

思路:计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

实现:假设“当前位置”指的是“在收索过程中某一时刻所在图中某个方

块位置”,则求迷宫中的一条路径的算法的基本思想是:若当前位置“可通”,

则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”则应该顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是“当前位置”四周4个方向(东·南·西·北)上相邻的方块。假设以栈S记录“当前路径”,则栈顶中存放的是“从当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“入栈”

3.2主要程序段设计

void

main()

{

int

i,j;

int

maze[m+2][n+2];

printf(“请输入迷宫矩阵:9*8\n“);

for(i=0,j=0;itop!=-1)

{

Pop_Seqstack(s,x=temp.x;

y=temp.y;

d=0;

/*将方向重新定位为右方,即move[0]*/

while(dtop!=-1)

{

Pop_Seqstack(s,Push_Seqstack(t,temp);

/*栈t是栈s的逆,因为s保存的途径是反的,加t使输出的途径变为正*/

}

Destroy_Seqstack(

/*销毁栈*/

while(t->top!=-1)

/*打印走过的途径*/

{

Pop_Seqstack(t,printf(““,temp.x,temp.y,temp.d);

}

printf(““,m,n);

Destroy_Seqstack(

/*销毁栈*/

return

OK;

}

else

d=0;

/*将方向定位为右方*/

}

else

d++;

/*尝试其

他方向是否可走*/

}

}

printf(“该迷宫无法走出\n“);

Destroy_Seqstack(

return

ERROR;

}

}

Mazepath函数

{if(迷宫入口或迷宫是否有通路)

Printf(“输入迷宫数据错误“);

else

{对move定义为向四个方向探索的数组

初始化栈s,t;

迷宫入口点入栈

While(判断s是否为空)

{

入口参数:指向迷宫数组的指针,开始点(x0,y0)

while(d

#include

#define

MAXSIZE

100

#define

ERROR

0

#define

OK

1

#define

m

9

#define

n

8

typedef

struct

/*用于存放迷宫的位置和该点信息*/

{

int

x,y,d;

}Datatype;

typedef

struct

/*该栈用于存储走过的结点*/

{

Datatype

data[MAXSIZE];

int

top;

}Sqstack,*PSqstack;

typedef

struct

/*用于存放当前结点可走的四个方向*/

{

int

x,y;

}item;

PSqstack

Init_Sqstack()

/*初始化空栈*/

{

PSqstack

s;

s=(PSqstack)malloc(sizeof(Sqstack));

if(s)

s->top=-1;

return

s;

}

int

Push_Sqstack(PSqstack

s,Datatype

x)

/*入栈*/

{

if(s->top==MAXSIZE-1)

return

ERROR;

/*栈满不能入栈*/

else

{

s->top++;

s->data[s->top]=x;

return

OK;

}

}

int

Pop_Sqstack(PSqstack

s,Datatypex)

/*出栈*/

{

if(!s)

return

ERROR;

/*栈控不能出栈*/

else

{x=s->data[s->top];

s->top--;

return

OK;

}

}

void

Destroy_Sqstack(PSqstacks)

/*销毁栈*/

{

if(*s)

free(*s);s=NULL;

return;

}

int

Mazepath(int

maze[][n+2],int

x0,int

y0)

/*求迷宫路径函数,入口参数:指向迷宫数组的指针,开始点(x0,y0)*/

{

PSqstack

s,t;

Datatype

temp;

int

x,y,d,i,j;

item

move[4];

if(maze[1][1]==1||maze[m][n]==1)

printf(“输入迷宫数据错误,起点和终点应为:0\n“);

else

{

move[0].x=0;

move[0].y=1;

move[1].x=1;

move[1].y=0;

move[2].x=0;

move[2].y=-1;

move[3].x=-1;

move[3].y=0;

/*对move定义为向四个方向探索的数组*/

s=Init_Sqstack();

/*初始化栈s*/

t=Init_Sqstack();

/*初始化栈t*/

if(!s)

{

printf(“栈初始化失败\n“);

return

(0);

}

temp.x=x0;

temp.y=y0;

temp.d=0;

Push_Sqstack(s,temp);

/*迷宫入口点入栈*/

while(s->top!=-1)

{

Pop_Sqstack(s,x=temp.x;

y=temp.y;

d=0;

/*将方向重新定位为右方,即move[0]*/

while(dtop!=-1)

{

Pop_Sqstack(s,Push_Sqstack(t,temp);

/*栈t是栈s的逆,因为s保存的途径是反的,加t使输出的途径变为正*/

}

Destroy_Sqstack(

/*销毁栈*/

while(t->top!=-1)

/*打印走过的途径*/

{

Pop_Sqstack(t,printf(““,temp.x,temp.y,temp.d);

}

printf(““,m,n);

Destroy_Sqstack(

/*销毁栈*/

return

OK;

}

else

d=0;

/*将方向定位为右方*/

}

else

d++;

/*尝试其他方向是否可走*/

}

}

printf(“该迷宫无法走出\n“);

Destroy_Sqstack(

return

ERROR;

}

}

void

main()

{

int

i,j;

int

maze[m+2][n+2];

printf(“请输入迷宫矩阵:9*8\n“);

for(i=0,j=0;i

/*将迷宫四周赋值为1,即不可走*/

maze[i][j]=1;

for(i=0,j=0;j

maze[i][j]=1;

for(i=0,j=n+1;i

maze[i][j]=1;

for(i=m+1,j=0;j

maze[i][j]=1;

for(i=1;i

/*给迷宫赋值*/

{

for(j=1;j

scanf(“%d“,}

for(i=0;i

/*打印迷宫*/

{

for(j=0;j

{

if(maze[i][j]==0)

printf(““);

else

printf(“#“);

}

printf(“\n“);

}

Mazepath(maze,1,1);

}

满园春色 2022-07-13 03:47:12

相关推荐

蚍蜉撼树是什么意思蚍(蚍蜉撼树是什么意思)

1、蜉蝣树(拼音pfhnsh)是中国成语,蜉蝣树(蜉蝣:一种大蚂蚁;Shake:摇动)比喻力量本来就很弱,但是你想摇动一个很强大的东西,就不能随心所欲了。这个成语一般用作主语、谓语、宾语,属于主谓式,含有贬义。...
展开详情

得意洋洋,反义词(得意洋洋的反义词)

1、得意洋洋的反义词有郁郁寡欢的,有空虚进取的书,有哭天抢地的,有郁郁寡欢的,有失意的,有垂头丧气的,有谦虚谨慎的,有黯然销魂的,有抑郁的。2、“得意”是中国成语,读作:dyyngyng,解释为:得意:明白意图...
展开详情

如法炮制的意思和造句(如法炮制)

1、如法炮制(拼音:rfpozh)是一个成语,起源于西汉的司马迁《史记魏世家》。2、如法炮制(炮制:一种将中药焙炒的方法)是指按照制造方法制造中药;比喻按照现成的方式办事。一般在句子中做谓语、定语、状语。3、出...
展开详情

阳春白雪和下里巴人最初指的是什么(春白雪)

1、杨春白雪。2、杨春白雪,中国的一个成语,发音为yngchnbixu,最初指战国时期楚国比较高雅的歌曲,后来指博大精深的文学艺术。3、战国楚宋玉《对楚王问》:“仲英有歌者,其开头为:《对楚王问》《下里》。全国...
展开详情

依草附木的理解(依草附木的意思)

1、草乌,中国成语,拼音为ycofm,意为鬼神有所依靠,善于造化;比喻依靠他人的力量后,作恶多端;也比喻不能自立,依赖他人。从《巫庙》。2、出自五代和纣王的诗《巫庙》:“天有福报,老人为精灵,循草而沾木,无虚妄...
展开详情

精选推荐更多>

同茫茫宇宙相比地球是渺小的说明方法

同茫茫宇宙相比地球是渺小的说明方法是作比较。
作比较是将两种类别相同或不同的事物、现象加以比较来说明事物特征的说明方法。说明某些抽象的或者是人们比较陌生的事物,可以用具体的或者大家已经熟悉的事物和它比较,使读者通过比较得到具体而鲜明的印象。事物的特征也往往在比较中显现出来。在作比较的时候,可以是同类相比,也可以是异类相比,可以对事物进行“横比”,也可以对事物进行“纵比”。
作用:把……与……进行比较,突出强调了说明对象的特点。
例句:永定河发水时,来势很猛,以前两岸河堤常被冲毁,但是这座桥却从没出过事,足见它的坚固。——《中国石拱桥》

秋赏菊的前一句是什么

“秋赏菊”的全句是“踏秋赏菊去登高”,上一句是“重阳节,要敬老”。
出自人教版部编本二年级下册课文识字2《传统节日》:春节到,人欢笑,贴窗花,放鞭炮。元宵节,看花灯,大街小巷人如潮。清明节,雨纷纷,先人墓前去祭扫。过端午,赛龙舟,粽子艾香满堂飘。七月七,来乞巧,牛郎织女会鹊桥。过中秋,吃月饼,十五圆月当空照。重阳节,要敬老,踏秋赏菊去登高。转眼又是新春到,全家团圆真热闹。
中国传统节日,是中华民族悠久历史文化的重要组成部分,形式多样、内容丰富。传统节日的形成,是一个民族或国家的历史文化长期积淀凝聚的过程。中华民族的古老传统节日,涵盖了原始信仰、祭祀文化、天文历法、易理术数等人文与自然文化内容,蕴含着深邃丰厚的文化内涵。从远古先民时期发展而来的中华传统节日,不仅清晰地记录着中华民族先民丰富而多彩的社会生活文化内容,也积淀着博大精深的历史文化内涵。

酯化反应可逆吗

酯化都是可逆反应,酯化在浓硫酸中进行,同时生成的酯在酸性条件下会发生水解,所以是可逆反应。酯化反应,是一类有机化学反应,是醇跟羧酸或含氧无机酸生成酯和水的反应。分为羧酸跟醇反应和无机含氧酸跟醇反应和无机强酸跟醇的反应三类。
有机化学又称为碳化合物的化学,是研究有机化合物的组成、结构、性质、制备方法与应用的科学,是化学中极重要的一个分支。含碳化合物被称为有机化合物是因为以往的化学家们认为这样的物质一定要由生物(有机体)才能制造;然而在1828年的时候,德国化学家弗里德里希·维勒,在实验室中首次成功合成尿素(一种生物分子),自此以后有机化学便脱离传统所定义的范围,扩大为烃及其衍生物的化学。

精卫填海是民间故事吗

《精卫填海》是民间故事。
《精卫填海》是中国上古神话传说之一。相传精卫本是炎帝神农氏的小女儿,名唤女娃,一日女娃到东海游玩,溺于水中。死后的女娃化作花脑袋、白嘴壳、红色爪子的一种神鸟,每天从山上衔来石头和草木,投入东海,然后发出“精卫、精卫”的悲鸣,好像在呼唤着自己。
基于不同的研究视角,人们把“精卫填海”神话归于不同的神话类型。“精卫填海”神话属于典型的变形神话,且属于变形神话中的“死后托生”神话,即将灵魂托付给现实存在的一种物质。不仅如此,“精卫填海”还属于复仇神话,女娃生前与大海无冤无仇,但是却不慎溺水身亡,如此与大海结下仇恨,化身为鸟终身进行填海的复仇事业。
中国上古神话中记录了很多典型的非自然死亡,其中的意外让人看到了先人在自然面前的弱小和无能为力,同时也透出了生命的脆弱。女娃的死就是一种因事故而亡,展现出生命的脆弱和大海的强大。
著名作家茅盾则认为:精卫与刑天是属于同型的神话,都是描写百折不回的毅力和意志的,这是属于道德意识的鸟兽神话。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200