第一篇:大班阅读:有趣的导游图
大班阅读:有趣的导游图
时间: 2012-9-10 作者: 张丽华 单位:常州市红溪实验幼儿园 来源:早期教育
活动目标
1.认识几种生活标志,学习阅读导游图上的多种信息。
2.乐于尝试解决问题,能与同伴合作规划游览线路。
3.尝试自主阅读“淹城野生动物园”的导游图,感受导游图的方便与实用。活动准备
动物园导游图大图一张,小组操作用的中图三张:“淹城野生动物园”导游图18份;进口、出口、售票处、问讯处、医务室、火车站、餐厅、厕所标志各一份;写有1~6数字的小旗子三份。
活动过程
一、谈话引出话题
师:今天,老师带来了一张跟动物有关的图,我们一起来看一看。
二、出示动物园导游图大图,阅读各种信息
1.幼儿运用已有生活经验读图。师:看看图上有什么?图上用什么来表示动物的?为什么又画动物图像又写文字呢?(又有图像又有文字能让更多的人读懂)图上有这么多动物,这是哪里啊?(动物园)
2.认识几种生活标志。师:除了动物,你还看到了什么?(进口、出口、售票处、问讯处、医务室等标志。幼儿看到哪种标志教师就出示该标志在黑板上,先让幼儿说说这种标志是什么意思,然后了解标志的名称,再请幼儿到大导游图上找到该标志。)这张图告诉我们这么多信息,这是一张什么图?(地图)
3.幼儿尝试在导游图上找目的地。师:(1)动物园的地图有什么用呢?(帮助大家又快又准地找到要去的地方)(2)动物园这么多动物,你最想看什么动物?请个别幼儿上来找到一个自己最想看的动物场馆并指出游览线路。(3)请幼儿找出三个游览景点,规划游览线路,说说先到哪里,再到哪里,最后到哪里,为什么要按这样的顺序游玩。
教师小结:孩子们,正像你们说的一样,动物园的地图中藏着很多既有趣又有用的信息,它可以让人们又快又准确地找到想去的地方,不走弯路,节约时间。这样把游览景点画出来方便大家的地图叫导游图。你们见过导游图吗?在哪里见过?
三、分组操作:规划游览线路,自主阅读导游图
1.幼儿自主阅读“淹城野生动物园”导游图。每人一份导游图,自主阅读,看看导游图上有哪些信息,跟黑板上的大图是否一样,有哪些不一样的东西,去过动物园的小朋友可以找一找上次玩了哪几个地方,边看图可以边跟旁边的好朋友讨论讨论。
2.请一名幼儿上来讲讲自己是怎样阅读的,发现了哪些跟大图上不一样的东西,跟大家交流分享。
3.幼儿分成三组合作规划游览线路。要求:首先,每人在动物园导游图上找一个自己最想去的地方,然后大家商量:第一站去哪里?第二站去哪里?第三四五六站去哪里?最后把写有1、2、3、4、5、6的小旗子按先后顺序贴在相应的景点,检查一下线路是不是合理。
4.评价小组操作情况。从三组中选一张小组规划的线路图贴到黑板上,请一名代表上来介绍是怎样规划的,为什么这样规划,老师简单点评。
四、迁移经验,鼓励幼儿关注生活中的导游图
师:今天我们阅读了导游图,还小组合作规划游览线路,我们知道了导游图不仅很有趣而且很实用,它能帮助大家又快又准确地找到自己想去的地方。在各个景点都有这样的导游图,以后你们出去游玩时就可以利用今天学到的方法阅读导游图,让它为你们服务。
第二篇:幼儿园大班语言课教案《有趣的导游图》及教学反思
《大班语言课教案《有趣的导游图》含反思》这是优秀的大班语言教案文章,希望可以对您的学习工作中带来帮助!
活动目标
1.认识几种生活标志,学习阅读导游图上的多种信息。
2.乐于尝试解决问题,能与同伴合作规划游览线路。
3.尝试自主阅读“野生动物园”的导游图,感受导游图的方便与实用。
4.教幼儿养成细心、认真的学习态度。
活动准备
动物园导游图大图一张,小组操作用的中图三张:“野生动物园”导游图18份;进口、出口、售票处、问讯处、医务室、火车站、餐厅、厕所标志各一份;写有1~6数字的小旗子三份。
活动过程
一、谈话引出话题
师:今天,老师带来了一张跟动物有关的图,我们一起来看一看。
二、出示动物园导游图大图,阅读各种信息
1.幼儿运用已有生活经验读图。师:看看图上有什么?图上用什么来表示动物的?为什么又画动物图像又写文字呢?(又有图像又有文字能让更多的人读懂)图上有这么多动物,这是哪里啊?(动物园)
2.认识几种生活标志。师:除了动物,你还看到了什么?(进口、出口、售票处、问讯处、医务室等标志。幼儿看到哪种标志教师就出示该标志在黑板上,先让幼儿说说这种标志是什么意思,然后了解标志的名称,再请幼儿到大导游图上找到该标志。)这张图告诉我们这么多信息,这是一张什么图?(地图)
3.幼儿尝试在导游图上找目的地。
师:(1)动物园的地图有什么用呢?(帮助大家又快又准地找到要去的地方)
(2)动物园这么多动物,你最想看什么动物?请个别幼儿上来找到一个自己最想看的动物场馆并指出游览线路。
(3)请幼儿找出三个游览景点,规划游览线路,说说先到哪里,再到哪里,最后到哪里,为什么要按这样的顺序游玩。
教师小结:孩子们,正像你们说的一样,动物园的地图中藏着很多既有趣又有用的信息,(教案出自:.快思教案网)它可以让人们又快又准确地找到想去的地方,不走弯路,节约时间。这样把游览景点画出来方便大家的地图叫导游图。你们见过导游图吗?在哪里见过?
三、分组操作:规划游览线路,自主阅读导游图
1.幼儿自主阅读“野生动物园”导游图。每人一份导游图,自主阅读,看看导游图上有哪些信息,跟黑板上的大图是否一样,有哪些不一样的东西,去过动物园的小朋友可以找一找上次玩了哪几个地方,边看图可以边跟旁边的好朋友讨论讨论。
2.请一名幼儿上来讲讲自己是怎样阅读的,发现了哪些跟大图上不一样的东西,跟大家交流分享。
3.幼儿分成三组合作规划游览线路。要求:首先,每人在动物园导游图上找一个自己最想去的地方,然后大家商量:第一站去哪里?第二站去哪里?第三四五六站去哪里?最后把写有1、2、3、4、5、6的小旗子按先后顺序贴在相应的景点,检查一下线路是不是合理。
4.评价小组操作情况。从三组中选一张小组规划的线路图贴到黑板上,请一名代表上来介绍是怎样规划的,为什么这样规划,老师简单点评。
四、迁移经验,鼓励幼儿关注生活中的导游图
师:今天我们阅读了导游图,还小组合作规划游览线路,我们知道了导游图不仅很有趣而且很实用,它能帮助大家又快又准确地找到自己想去的地方。在各个景点都有这样的导游图,以后你们出去游玩时就可以利用今天学到的方法阅读导游图,让它为你们服务。
教学反思:
今天上了一节绘本课《七只猴子去旅行》我是以图片导入的,让孩子们观察图片上的标志,并说说是什么标志,说出这个标志所反映出来的是什么意思。孩子们都积极踊跃的回答,令我意外的是他们居然都认识这些标志,而且说的特别好。于是我就引出了今天的故事:“有几只小猴子们要出去旅行,在旅行的途中他们见到了许多标志,让我们一起去看看吧!首先让幼儿看首页,说出故事名称和故事的主人公。然后观察每一幅图,让幼儿说说在图中看到了什么?发生了什么事情?孩子们都积极的回答问题。也了解到每个标志的意思。看完图之后,让幼儿说一说从这个故事里学到了什么?孩子们说要遵守规则。这节课我觉得不足的地方是虽然孩子们回答问题很积极,但是几乎每次都是那些孩子,对于不爱发言的孩子我更应该去关注他们,去引导他们,不要一节课回答问题的都是那些人,让每个孩子都有机会发言。在最后的时候没有对孩子说学到了什么而去总结,整节课流程可以,但是可以在某些地方加点环节,比如小猴摘花,可以让孩子们到前面去表演。最后应该延伸一下,还有哪些是我们要遵守的规则,比如交通规则,上课时,做游戏时要遵守什么规则。对于绘本阅读,应该多研究。多学习,让孩子能快乐的学,在学中玩,玩中学。
大班语言课教案《有趣的导游图》含反思这篇文章共5190字。
第三篇:旅游区导游图
旅游区导游图
题目内容: 问题描述:
设某个旅游区共有n个旅游景点(n≥10),每个旅游景点都和相邻的m个旅游景点(m≥2,m 以(Vi ,Vj ,d)的形式从键盘输入建立该旅游区的旅游景点图,其中:Vi和Vj表示两个不同的旅游景点,d表示这两个景点之间的道路距离;该旅游景点图采用邻接链表存储结构。实现要求: ⑴ 旅游景点图的输出:分别以邻接矩阵、邻接链表的方式输出该旅游景点图。⑵ 相邻景点查询:假设对于每个景点,设置有简易的信息查询,要求能给出与该景点相邻的所有景点(有直接的道路相通)及对应的距离。 ⑶ 景点路线查询:假设对于每个景点,设置有景点路线查询,要求能给出从该景点出发到任一其它景点的最短简单路径及距离。 ⑷ 景点路线综合查询:对于该旅游区的任意两个景点,找出它们之间的最短简单路径及距离。 ⑸ 最佳旅游路线确定:假设该旅游区的入口也是出口,请确定一条最佳的旅游线路,该线路必须经过所有的旅游景点(有些景点可以重复经过)且走的路最短。⑹ 设计一个菜单,上述操作要求都作为菜单中的主要菜单项。 代 码 如 下: ································ #include“stdio.h” #include“malloc.h” #include “string.h” #define INFINITY 32767 /* 图的最大权值,32767是整数表示的最大值*/ #define MAX_VEX 30 /* 最大顶点数目 */ #define MAX_VALUE 999999999 typedef int InfoType;typedef char VexType;typedef enum{DG=1, AG=2, WDG=3,WAG=4}GraphKind;/*枚举常量定义旅游景点对应的图类型*/ typedef struct Path { int vertex[MAX_VEX];int value;int count;}GPath; typedef struct MGraph { char vexs[MAX_VEX]; /*存放图的邻接矩阵的的顶点,顶点向量 */ int arcs[MAX_VEX][MAX_VEX]; /*存放图的邻接矩阵的边 */ int vexnum,arcnum; /*图的当前顶点数和弧数 */ }MGraph; /*图的邻接链表转换为矩阵后,图的结构定义 */ /*图的邻接矩阵存储结构中结点结构体的定义*/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct Linknode { char adjvex; /*邻接点在头结点数组中的位置(邻接边的弧头顶点序号)*/ InfoType info; /*与边或弧相关的信息, 如权值 */ struct Linknode *nextarc; /*指向下一个表结点 */ }LinkNode; /*邻接边单链表的结点结构体 */ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct VexNode { char data; /*数据域存储顶点信息 */ int indegree; /*顶点的度, 有向图是入度或出度或没有 */ LinkNode *firstarc; /*链域指向第一个表结点(邻接边头指针)*/ }VexNode; /*顶点结点类型定义 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct { GraphKind kind; /*图的种类标志 */ int vexnum; /*顶点个数 */ VexNode AdjList[MAX_VEX]; /*邻接表数组 */ }ALGraph; /*图的结构定义 */ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct { VexType vex1, vex2; /*弧或边所依附的两个顶点 */ InfoType info; /*与边或弧相关的信息, 如权值 */ }ArcType; /*弧或边的结构定义 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Init_Graph(ALGraph * G) /*图的初始化 */ { do { printf(“请确认旅游景点的类型(1:无向图。2:有向图。3:带权有向图。4:带权无向图):n”); } scanf(“%d”, &G->kind);if(G->kind==4)printf(“旅游区导游图的类型:带权无向图n”);else { } printf(“ ●您选择的图的类型不对●n”); while(G->kind!=4);G->vexnum=0; /* 初始化顶点个数为0 */ } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int LocateVex(ALGraph *G, VexType vp) /*图的顶点定位(图的顶点定位实际上是确定一个顶点在AdjList数组中的某个元素的data域内容。)*/ { int k;for(k=0;k /*如果存在此顶点返回顶点数组下标值 return(-1); /*如果没有则返回-1(图中无此顶点) */ */ } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int AddVertex(ALGraph *G, char vp) /*向图中增加顶点(向图中增加一个顶点的操作,在AdjList数组的末尾增加一个数据元素。)*/ { int k;if(G->vexnum>=MAX_VEX){ } if(LocateVex(G,vp)!=-1){ printf(“所要添加的顶点已存在!n”);printf(“图中顶点数已达到最多!n”); return(-1);return(-1);} G->AdjList[G->vexnum].data=vp;G->AdjList[G->vexnum].indegree=0;G->AdjList[G->vexnum].firstarc=NULL;k=++G->vexnum;return k;} /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int AddArc(ALGraph *G, ArcType *arc)/*向图中增加一条边(弧)(根据给定的弧或边所依附的顶点,修改单链表:无向图修改两个单链表;)*/ { int k,j;LinkNode *p,*q;k=LocateVex(G,arc->vex1);j=LocateVex(G,arc->vex2);if(k==-1||j==-1) /*先判断是否两个顶点重复或者是否存在这两个顶点*/ { printf(“该两个景点为一点或两景点都不存在,错误!n”); return(-1);} p=(LinkNode *)malloc(sizeof(LinkNode));p->adjvex=arc->vex1;p->info=arc->info;p->nextarc=NULL; /* 边的起始表结点赋值 */ q=(LinkNode *)malloc(sizeof(LinkNode));q->adjvex=arc->vex2;q->info=arc->info; q->nextarc=NULL; /* 边的末尾表结点赋值 */ q->nextarc=G->AdjList[k].firstarc; G->AdjList[k].firstarc=q;p->nextarc=G->AdjList[j].firstarc;G->AdjList[j].firstarc=p; /* 是无向图, 用头插入法插入到两个单链表 */ return(1); /*无向图,把p和q互相连接到彼此的边点上 */ } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ALGraph *Create_ALGraph()/*采用邻接链表作为图的存储结构建立带权有向图*/ { char stack1[MAX_VEX],stack2[MAX_VEX],vex,k1,k2;int weight;ALGraph *G;ArcType *p;printf(“首先对旅游区导游图进行初始化:nn”);G=(ALGraph *)malloc(sizeof(ALGraph));//申请动态结点空间 Init_Graph(G);printf(“n请输入旅游区导游图的各个旅游景点代码(以字符的形式出入),当输入0时作为结束标志n”);while(1){ scanf(“%s”,stack1);/*以字符串的形式输入存储旅游区景点,一次一个的存储输入的景点存到数组中之后又在图中插入该顶点,当输入0时结束*/ vex=stack1[0]; /*用字符串可以区别结束标识,用字符存到数组中不易设置结束标志*/ } if(vex=='0')break;else AddVertex(G,vex);p=(ArcType *)malloc(sizeof(ArcType));printf(“n 从键盘输入以(Vi ,Vj ,d)的形式建立该旅游区的旅游景点图,n 其中: Vi和Vj表示两个不同的旅游景点, d表示这两个景点之间的道路距离;n 该旅游景点图采用邻接链表存储结构(当输入第一个顶点是0时表示结束):n”); while(1){ scanf(“%s”,stack1);k1=stack1[0]; if(k1=='0') /* 输入第一个顶点,0结束 */ break; else { scanf(“%s”,stack2);scanf(“%d”,&weight); /* 输入第二个顶点和权值 */ k2=stack2[0];p->vex1=k1;p->vex2=k2;p->info=weight; AddArc(G,p);printf(“n请继续输入下一条道路!n”);} } return(G);} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void output_ALGraph(ALGraph *G) // 2:输出图的邻接链表 { int j;LinkNode *p; printf(“n旅游区导游图的邻接链表景点输出表示如下:n”);for(j=0;j printf(“%c”,G->AdjList[j].data); p=G->AdjList[j].firstarc; while(p!=NULL) //输出一个邻接链表的景点之后,继续输出他的其他邻接景点 } { } printf(“-> ”);printf(“<%c,%d>”,p->adjvex,p->info);p=p->nextarc;printf(“nn”);} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void output_Find_ALGraph(ALGraph *G) // 4:相邻景点查询并输出 { int j;LinkNode *p; //定义邻接边单链表结点p printf(“请输入您要查询的景点(顶点数组下标值):n”); //从输入的景点开始找和其相邻的景点并输出权值 scanf(“%d”,&j); p=G->AdjList[j].firstarc; //定义邻接边头指针 while(p!=NULL){ printf(“景点%c到景点%c的距离是%d(两景点之间有相连的道路)n”,G->AdjList[j].data,p->adjvex,p->info);//第j个景点和他下一个相邻的景点和权值 p=p->nextarc; //指向下一个结点的地址,使全部与G->AdjList[j].data直接连通的顶点全部输出,NULL时截止 } printf(“nn”);} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void ListToMat(ALGraph G, MGraph &g) /*将邻接链表转换成邻接矩阵 */ { int k,i,j; LinkNode *p;for(i=0;i /*g.arcs[i][j]赋初值INFINITY for(j=0;j g.arcs[i][j]=INFINITY;for(i=0;i /*把链表的数组顶点保存到数组vexs[i]} for(i=0;i p=G.AdjList[i].firstarc;while(p!=NULL) { k=LocateVex(&G,p->adjvex); /*取和p相邻的顶点下标值用于邻接*/ 中*/ 矩阵的下标值 */ g.arcs[i][k]=g.arcs[k][i]=p->info;/*把权值赋值给二维数组用于矩阵输出 */ */ } } p=p->nextarc; /*指向下一个邻接表结点 } g.vexnum=G.vexnum;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void display(ALGraph *G,MGraph g) /*3:输出邻接矩阵 */ { int i,j;ListToMat(*G, g); /*将邻接链表转换成邻接矩阵 */ printf(“ ”);for(i=0;i /*输出矩阵横向顶点值 */ printf(“n”);for(i=0;i printf(“%c ”,G->AdjList[i].data); /*输出矩阵竖向顶点值,每输出一行输出一次顶点*/ } } for(j=0;j if(g.arcs[i][j]==INFINITY) printf(“∞ ”);else printf(“%-8d”, g.arcs[i][j]); /*每个权值占有8个字符,负号表示左端对齐 */ } printf(“n”);//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void dijkshort_One(ALGraph F, MGraph G,int v0,int distance[], int path[])/* 带权图G从顶点v0到其他定点的最短距离distance和最短路径前驱结点的下标path*/ //带权图F从下标v0到其他顶点的最短距离diatance和最短路径下标path,path中存放了从输入的v0到其他各个顶点的最短路径的前一个顶点的下标 //基于狄克斯特拉函数的设计 { int *S=(int *)malloc(sizeof(int)*G.vexnum);int minDis,i,j,u,p; ListToMat(F, G);printf(“你所要开始查询的景点是:%cn”,F.AdjList[v0].data);for(i=0;i distance[i]=G.arcs[v0][i];S[i]=0;if(distance[i] path[i]=-1;} S[v0]=1; //标记顶点v0已从集合T加入到集合S中(以v0为下标值的顶点)for(i=0;i minDis=INFINITY;for(j=0;j { minDis=distance[j]; u=j;} } S[u]=1; //标记顶点u已从集合T加入到集合S中(以u为下标值的顶点) for(j=0;j // /修改从v0到其他顶点的最短距离和最短路径 if(S[j]==0&&G.arcs[u][j] } } //顶点v0到其他所有的顶点的最短距离已经保存在数组distance中 printf(“查询结果是:n”);for(j=0;j if(path[j]!=-1){ printf(“从景点%c到景点%c”,F.AdjList[v0].data,G.vexs[j]); p=path[j]; printf(“的最短距离是: %d”,distance[j]);//输出顶点v0到其他所有的顶点的最短printf(“ 途中经过的景点有:”);while(p!=-1){ printf(“ %c”,G.vexs[p]); 路径 } p=path[p];} printf(“n”); } else if(j!=v0) printf(“n%c到%c : 没有通路!”,G.vexs[j],G.vexs[v0]);/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void dijkshort_Two(ALGraph F, MGraph G,int v0,int distance[], int path[])/*带权图G从顶点v0到其他定点的最短距离distance和最短路径前驱结点的下标path*/ { int w;int S[30],i,j,k,p,min,d;ListToMat(F, G);printf(“你所要开始查询的开始景点是:%cnn”,F.AdjList[v0].data);for(i=0;i { distance[i]=G.arcs[v0][i];S[i]=0;if(distance[i] //顶点v0已加入到集合S中 for(i=0;i min=INFINITY;for(j=0;j if(!S[j]&&distance[j] { } min=distance[j];k=j;} S[k]=1; ///将找到的顶点加入到集合S中 for(w=0;w // /修改集合T中顶点的距离值 if(!S[w]&&distance[w]>distance[k]+G.arcs[k][w]){ distance[w]=distance[k]+G.arcs[k][w];} path[w]=k;} printf(“输入你要查询的另外一个景点(下标值):”);scanf(“%d”,&d);printf(“你要查询的另外一个景点是:%cn”,G.vexs[d]);printf(“n查询结果:n”);//输出结果 if(path[d]!=-1){ printf(“从景点%c到景点%c”,F.AdjList[v0].data,G.vexs[d]); p=path[d];printf(“的最短距离是: %d”,distance[d]);printf(“ 途中经过的景点有:”);while(p!=-1){ printf(“ %c”,G.vexs[p]);p=path[p];} printf(“n”);} } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void dfs_path(ALGraph *g,int src,int cur,int vis[],GPath *cur_path,GPath * min_path){ LinkNode * node =g->AdjList[cur].firstarc;for(;node!=NULL;node=node->nextarc)/*起始条件为node =g->AdjList[cur].firstarc*/ { } char adj=node->adjvex;int index=LocateVex(g,adj);if(vis[index]==0){ } cur_path->vertex[cur_path->count++]=index;cur_path->value+=node->info;vis[index]=1;dfs_path(g,src,index,vis,cur_path,min_path);cur_path->count--;cur_path->value-=node->info;vis[index]=0;if(vis[src]){ } if(cur_path->count==g->vexnum){ if(cur_path->value min_path.value=MAX_VALUE;dfs_path(g,src,src,vis,&cur_path,&min_path);if(min_path.value!=MAX_VALUE){ int i=0;printf(“n最佳旅游路线景点下标值是:n”);for(i=0;i printf(“%d->”,min_path.vertex[i]);} printf(“n”);printf(“n最佳旅游路线景点是:n”); for(i=0;i { printf(“%c-> ”,g->AdjList[min_path.vertex[i]].data); } } printf(“n”);}else { printf(“建立的图中没有最佳路径n”);} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*------------菜单------------*/ void main(){ int n,v0;MGraph g;int distance[MAX_VEX],path[2*MAX_VEX];ALGraph *G; printf(“ ============================n”); printf(“ !欢迎使用旅游区导游系统 !n”);printf(“ ============================n”);do { printf(“n请选择对该旅游区导游图的操作→nn”); printf(“ ┏━━━━━━━━━━━━━━━━━━━━━┓n”);printf(“ ┃ 1.建立旅游区导游图的邻接链表存储 ┃n”);printf(“ ┃ 2.旅游区导游图的邻接链表的输出 ┃n”);printf(“ ┃ 3.旅游区导游图的邻接矩阵的输出 ┃n”);printf(“ ┃ 4.相邻景点查询 ┃n”);printf(“ ┃ 5.景点路线查询 ┃n”);printf(“ ┃ 6.景点路线综合查询(查询两景点最短路径)┃n”);printf(“ ┃ 7.最佳路径 ┃n”);printf(“ ┃ 8.退出 ┃n”);printf(“ ┗━━━━━━━━━━━━━━━━━━━━━┛n”);do { } scanf(“%d”,&n);while(n<1||n>9);switch(n){ case 1: { G=(ALGraph *)malloc(sizeof(ALGraph));/*动态申请图G的内存空间*/ G=Create_ALGraph();printf(“nn”);break; } case 2: { } { printf(“n旅游导游图的邻接链表表示如下所示:n”);output_ALGraph(G);printf(“nn”);break;case 3: printf(“n旅游区导游图的邻接矩阵表示如下所示:n”);printf(“n∞表示两景点之间不存在连通的路线n”);printf(“n数值表示两景点之间的路线长度n”);display(G,g);printf(“nn”);break; } case 4: { } case 5: { } case 6: { } case 7: { } } } while(n!=8);} output_Find_ALGraph(G);printf(“nn”);break;printf(“输入你要查询的景点(下标值):”);scanf(“ %d”,&v0);dijkshort_One(*G,g,v0,distance,path);break;printf(“输入你要查询的开始景点(下标值):”);scanf(“ %d”,&v0);dijkshort_Two(*G,g,v0,distance,path);break;printf(“输入你要查询的开始景点(下标值):”);scanf(“%d”,&v0);printf(“景点是%c ”,G->AdjList[v0].data);best_path(G,v0);break; 课程设计任务书 2013~2014学年第 1 学期 学生姓名:专业班级:2012网络工程(1)班 指导教师:冯珊工作部门:计算机学院 一、课程设计题目: 公园导游图 二、课程设计内容 给出一张某公园的导游图,游客通过终端询问可知:从某一景点到另一景点的最短路径。游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。 三、进度安排 1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2. 完成最低要求:建立一个文件,包括5个景点情况,能完成遍历功能; 3. 进一步要求:进一步扩充景点数目,画出景点图,有兴趣的同学可以自己扩充系统功能。 四、基本要求 1.界面友好,函数功能要划分好 2.总体设计应画一流程图 3.程序要加必要的注释 4.要提供程序测试方案 5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价 值的。 数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 实验四:图(内容:某公园导游图) 一、问题描述: 公园导游系统:给出一张某公园的导游图,游客通过终端询问可知︰从某一景到另一景点的最短路径。游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。 二、设计描述: 1.输入导游图的算法(存储方法).本程序特地设计函数void initgraph()用于实现键盘输入图的结构; 2.可访问导游图中任一景点的算法.为此设计了函数void vist(GraphMatrix graph)用于实现访问任一景点的信息; 3.最短路径从一景点到另一景点的算法。利用floyd算法-实现每一对景点间的最短路径。并利用void outgraph()函数实现显示起始点和终点间的最短路径和其长度; 三、程序清单: #include typedef char VexType;数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 typedef float AdjType;typedef struct //定义图结构 { int n; /* 图的顶点个数 */ VexType vexs[MAXVEX]; /* 顶点信息 */ AdjType arcs[MAXVEX][MAXVEX]; /* 边信息 */ } GraphMatrix;GraphMatrix graph; //定义一个图graph typedef struct //定义最短路径ShortPath结构 { AdjType a[MAXVEX][MAXVEX]; /* 关系矩阵A,存放每对顶点间最短路径长度 */ int nextvex[MAXVEX][MAXVEX]; /* nextvex[i][j]存放vi到vj最短路径上vi的后继顶点的下标值 */ } ShortPath;ShortPath path; //定义路径path void floyd(GraphMatrix * pgraph, ShortPath * ppath) //floyd算法-用于实现每一对景点间的最短路径 { int i, j, k; for(i = 0;i < pgraph->n;i++) for(j = 0;j < pgraph->n;j++){ if(pgraph->arcs[i][j]!= MAX) ppath->nextvex[i][j] = j;数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 else ppath->nextvex[i][j] =-1; ppath->a[i][j] = pgraph->arcs[i][j]; } for(k = 0;k < pgraph->n;k++) for(i = 0;i < pgraph->n;i++) for(j = 0;j < pgraph->n;j++){ if(ppath->a[i][k] >= MAX || ppath->a[k][j] >= MAX) continue; if(ppath->a[i][j] > ppath->a[i][k]+ ppath->a[k][j]){ ppath->a[i][j] = ppath->a[i][k] + ppath->a[k][j]; ppath->nextvex[i][j] = ppath->nextvex[i][k]; } } } void outgraph() //out()函数用于实现显示起始点和终点间的最短路径和其长度 { int c,b,i;cout< //输入要查找起始点和终点(本程序限于编号(int型))cout< //通过path.a[c][b]把路径长度赋给i 数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 cout<<“该路径总长为:”;cout< //输出路径长度 cout<<“所得路径顺序为”;cout< //此处输出路径的第一个编号 c=path.nextvex[c][b]; for(;c!=b;c=path.nextvex[c][b]) //循环顺序输出路径始点和终点之间的景点编号 cout<<“,”< //再输出路径的最后一个编号 cout< //该函数用于实现键盘输入图的结构 { int i,m,j;printf(“请输入公园景点的个数:”); //图结点的个数赋给graph.n scanf(“%d”,&m);graph.n=m;for(i=0;i //循环输入结点顶点信息 { printf(“请输入第%i个景点信息:”,i);//为了简明起见此程序结点顶点信息限于字符型 cin>>graph.vexs[i];} printf(“请输入公园的邻接矩阵的信息n”);//循环输入图的邻接矩阵信息(也就是输入一个二维数组)for(i=0;i 班级:06软件工程 姓名:周邓雄 学号:06517037 for(j=0;j printf(“请输入第%d行,第%d列的元素:”,i+1,j+1);cin>>graph.arcs[i][j];} } void vist(GraphMatrix graph) //函数用于实现访问任一景点的信息 { int i; cout< cout<<“你想知道哪个景点的信息:”;//注意输入的是景点的编号 cin>>i; cout< cout<<“景点信息查询结果为:”; cout< cout< //用于判断是否继续执行特定的下一步程序 {int a;cout<<“还想继续查询?(1&0)”;cin>>a;return a;} int main()数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 { int i,j; initgraph(); //initgraph()函数来实现键盘输入图的结构 floyd(&graph, &path); cout<<“为了验证下面运算结果的方便,循环输出nextvex[i][j]数组”; for(i = 0;i < graph.n;i++) { for(j = 0;j < graph.n;j++) //为了验证下面运算结果的方便,循环输出nextvex[i][j]数组 printf(“%d ”, path.nextvex[i][j]); //nextvex[i][j]存放vi到vj最短路径上vi的后继顶点的下标值 putchar('n'); } cout< outgraph(); while(jud()) outgraph(); //outgraph()函数用于实现显示起始点和终点间的最短路径和其长度 vist(graph); //函数用于实现访问任一景点的信息 cout< while(jud()) vist(graph); cout< return 0;} 数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037 验四:图(内容:某公园导游图) .问题描述 ① 给出一张某公园的导游图,游客通过终端询问可知: (1)从某一景点到另一景点的最短路径。 (2)游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览景点,最后回到出口(出口就在入口处旁边)。 .要求 ② 将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值给游客。 .实现提示 ③ (1)第一问实际是最短路径问题,如果有几条路径长度相同,可选择途径景点较少的路径提供给游客。 (2)第二问可采用深度优先搜索,如果有多种路径可选择,则选择带权路径最小的路线提供给游客。 .选做内容 ④ 可以把各种路径都显示给游客,由游客自己选择游览路线。数据结构实验报告 班级:06软件工程 姓名:周邓雄 学号:06517037第四篇:公园导游图 课程设计任务书
第五篇:某数据结构课程设计公园导游图