第一篇:大班閱讀:有趣的導(dǎo)游圖
大班閱讀:有趣的導(dǎo)游圖
時間: 2012-9-10 作者: 張麗華 單位:常州市紅溪實驗幼兒園 來源:早期教育
活動目標(biāo)
1.認(rèn)識幾種生活標(biāo)志,學(xué)習(xí)閱讀導(dǎo)游圖上的多種信息。
2.樂于嘗試解決問題,能與同伴合作規(guī)劃游覽線路。
3.嘗試自主閱讀“淹城野生動物園”的導(dǎo)游圖,感受導(dǎo)游圖的方便與實用。活動準(zhǔn)備
動物園導(dǎo)游圖大圖一張,小組操作用的中圖三張:“淹城野生動物園”導(dǎo)游圖18份;進(jìn)口、出口、售票處、問訊處、醫(yī)務(wù)室、火車站、餐廳、廁所標(biāo)志各一份;寫有1~6數(shù)字的小旗子三份。
活動過程
一、談話引出話題
師:今天,老師帶來了一張跟動物有關(guān)的圖,我們一起來看一看。
二、出示動物園導(dǎo)游圖大圖,閱讀各種信息
1.幼兒運用已有生活經(jīng)驗讀圖。師:看看圖上有什么?圖上用什么來表示動物的?為什么又畫動物圖像又寫文字呢?(又有圖像又有文字能讓更多的人讀懂)圖上有這么多動物,這是哪里啊?(動物園)
2.認(rèn)識幾種生活標(biāo)志。師:除了動物,你還看到了什么?(進(jìn)口、出口、售票處、問訊處、醫(yī)務(wù)室等標(biāo)志。幼兒看到哪種標(biāo)志教師就出示該標(biāo)志在黑板上,先讓幼兒說說這種標(biāo)志是什么意思,然后了解標(biāo)志的名稱,再請幼兒到大導(dǎo)游圖上找到該標(biāo)志。)這張圖告訴我們這么多信息,這是一張什么圖?(地圖)
3.幼兒嘗試在導(dǎo)游圖上找目的地。師:(1)動物園的地圖有什么用呢?(幫助大家又快又準(zhǔn)地找到要去的地方)(2)動物園這么多動物,你最想看什么動物?請個別幼兒上來找到一個自己最想看的動物場館并指出游覽線路。(3)請幼兒找出三個游覽景點,規(guī)劃游覽線路,說說先到哪里,再到哪里,最后到哪里,為什么要按這樣的順序游玩。
教師小結(jié):孩子們,正像你們說的一樣,動物園的地圖中藏著很多既有趣又有用的信息,它可以讓人們又快又準(zhǔn)確地找到想去的地方,不走彎路,節(jié)約時間。這樣把游覽景點畫出來方便大家的地圖叫導(dǎo)游圖。你們見過導(dǎo)游圖嗎?在哪里見過?
三、分組操作:規(guī)劃游覽線路,自主閱讀導(dǎo)游圖
1.幼兒自主閱讀“淹城野生動物園”導(dǎo)游圖。每人一份導(dǎo)游圖,自主閱讀,看看導(dǎo)游圖上有哪些信息,跟黑板上的大圖是否一樣,有哪些不一樣的東西,去過動物園的小朋友可以找一找上次玩了哪幾個地方,邊看圖可以邊跟旁邊的好朋友討論討論。
2.請一名幼兒上來講講自己是怎樣閱讀的,發(fā)現(xiàn)了哪些跟大圖上不一樣的東西,跟大家交流分享。
3.幼兒分成三組合作規(guī)劃游覽線路。要求:首先,每人在動物園導(dǎo)游圖上找一個自己最想去的地方,然后大家商量:第一站去哪里?第二站去哪里?第三四五六站去哪里?最后把寫有1、2、3、4、5、6的小旗子按先后順序貼在相應(yīng)的景點,檢查一下線路是不是合理。
4.評價小組操作情況。從三組中選一張小組規(guī)劃的線路圖貼到黑板上,請一名代表上來介紹是怎樣規(guī)劃的,為什么這樣規(guī)劃,老師簡單點評。
四、遷移經(jīng)驗,鼓勵幼兒關(guān)注生活中的導(dǎo)游圖
師:今天我們閱讀了導(dǎo)游圖,還小組合作規(guī)劃游覽線路,我們知道了導(dǎo)游圖不僅很有趣而且很實用,它能幫助大家又快又準(zhǔn)確地找到自己想去的地方。在各個景點都有這樣的導(dǎo)游圖,以后你們出去游玩時就可以利用今天學(xué)到的方法閱讀導(dǎo)游圖,讓它為你們服務(wù)。
第二篇:幼兒園大班語言課教案《有趣的導(dǎo)游圖》及教學(xué)反思
《大班語言課教案《有趣的導(dǎo)游圖》含反思》這是優(yōu)秀的大班語言教案文章,希望可以對您的學(xué)習(xí)工作中帶來幫助!
活動目標(biāo)
1.認(rèn)識幾種生活標(biāo)志,學(xué)習(xí)閱讀導(dǎo)游圖上的多種信息。
2.樂于嘗試解決問題,能與同伴合作規(guī)劃游覽線路。
3.嘗試自主閱讀“野生動物園”的導(dǎo)游圖,感受導(dǎo)游圖的方便與實用。
4.教幼兒養(yǎng)成細(xì)心、認(rèn)真的學(xué)習(xí)態(tài)度。
活動準(zhǔn)備
動物園導(dǎo)游圖大圖一張,小組操作用的中圖三張:“野生動物園”導(dǎo)游圖18份;進(jìn)口、出口、售票處、問訊處、醫(yī)務(wù)室、火車站、餐廳、廁所標(biāo)志各一份;寫有1~6數(shù)字的小旗子三份。
活動過程
一、談話引出話題
師:今天,老師帶來了一張跟動物有關(guān)的圖,我們一起來看一看。
二、出示動物園導(dǎo)游圖大圖,閱讀各種信息
1.幼兒運用已有生活經(jīng)驗讀圖。師:看看圖上有什么?圖上用什么來表示動物的?為什么又畫動物圖像又寫文字呢?(又有圖像又有文字能讓更多的人讀懂)圖上有這么多動物,這是哪里啊?(動物園)
2.認(rèn)識幾種生活標(biāo)志。師:除了動物,你還看到了什么?(進(jìn)口、出口、售票處、問訊處、醫(yī)務(wù)室等標(biāo)志。幼兒看到哪種標(biāo)志教師就出示該標(biāo)志在黑板上,先讓幼兒說說這種標(biāo)志是什么意思,然后了解標(biāo)志的名稱,再請幼兒到大導(dǎo)游圖上找到該標(biāo)志。)這張圖告訴我們這么多信息,這是一張什么圖?(地圖)
3.幼兒嘗試在導(dǎo)游圖上找目的地。
師:(1)動物園的地圖有什么用呢?(幫助大家又快又準(zhǔn)地找到要去的地方)
(2)動物園這么多動物,你最想看什么動物?請個別幼兒上來找到一個自己最想看的動物場館并指出游覽線路。
(3)請幼兒找出三個游覽景點,規(guī)劃游覽線路,說說先到哪里,再到哪里,最后到哪里,為什么要按這樣的順序游玩。
教師小結(jié):孩子們,正像你們說的一樣,動物園的地圖中藏著很多既有趣又有用的信息,(教案出自:.快思教案網(wǎng))它可以讓人們又快又準(zhǔn)確地找到想去的地方,不走彎路,節(jié)約時間。這樣把游覽景點畫出來方便大家的地圖叫導(dǎo)游圖。你們見過導(dǎo)游圖嗎?在哪里見過?
三、分組操作:規(guī)劃游覽線路,自主閱讀導(dǎo)游圖
1.幼兒自主閱讀“野生動物園”導(dǎo)游圖。每人一份導(dǎo)游圖,自主閱讀,看看導(dǎo)游圖上有哪些信息,跟黑板上的大圖是否一樣,有哪些不一樣的東西,去過動物園的小朋友可以找一找上次玩了哪幾個地方,邊看圖可以邊跟旁邊的好朋友討論討論。
2.請一名幼兒上來講講自己是怎樣閱讀的,發(fā)現(xiàn)了哪些跟大圖上不一樣的東西,跟大家交流分享。
3.幼兒分成三組合作規(guī)劃游覽線路。要求:首先,每人在動物園導(dǎo)游圖上找一個自己最想去的地方,然后大家商量:第一站去哪里?第二站去哪里?第三四五六站去哪里?最后把寫有1、2、3、4、5、6的小旗子按先后順序貼在相應(yīng)的景點,檢查一下線路是不是合理。
4.評價小組操作情況。從三組中選一張小組規(guī)劃的線路圖貼到黑板上,請一名代表上來介紹是怎樣規(guī)劃的,為什么這樣規(guī)劃,老師簡單點評。
四、遷移經(jīng)驗,鼓勵幼兒關(guān)注生活中的導(dǎo)游圖
師:今天我們閱讀了導(dǎo)游圖,還小組合作規(guī)劃游覽線路,我們知道了導(dǎo)游圖不僅很有趣而且很實用,它能幫助大家又快又準(zhǔn)確地找到自己想去的地方。在各個景點都有這樣的導(dǎo)游圖,以后你們出去游玩時就可以利用今天學(xué)到的方法閱讀導(dǎo)游圖,讓它為你們服務(wù)。
教學(xué)反思:
今天上了一節(jié)繪本課《七只猴子去旅行》我是以圖片導(dǎo)入的,讓孩子們觀察圖片上的標(biāo)志,并說說是什么標(biāo)志,說出這個標(biāo)志所反映出來的是什么意思。孩子們都積極踴躍的回答,令我意外的是他們居然都認(rèn)識這些標(biāo)志,而且說的特別好。于是我就引出了今天的故事:“有幾只小猴子們要出去旅行,在旅行的途中他們見到了許多標(biāo)志,讓我們一起去看看吧!首先讓幼兒看首頁,說出故事名稱和故事的主人公。然后觀察每一幅圖,讓幼兒說說在圖中看到了什么?發(fā)生了什么事情?孩子們都積極的回答問題。也了解到每個標(biāo)志的意思。看完圖之后,讓幼兒說一說從這個故事里學(xué)到了什么?孩子們說要遵守規(guī)則。這節(jié)課我覺得不足的地方是雖然孩子們回答問題很積極,但是幾乎每次都是那些孩子,對于不愛發(fā)言的孩子我更應(yīng)該去關(guān)注他們,去引導(dǎo)他們,不要一節(jié)課回答問題的都是那些人,讓每個孩子都有機(jī)會發(fā)言。在最后的時候沒有對孩子說學(xué)到了什么而去總結(jié),整節(jié)課流程可以,但是可以在某些地方加點環(huán)節(jié),比如小猴摘花,可以讓孩子們到前面去表演。最后應(yīng)該延伸一下,還有哪些是我們要遵守的規(guī)則,比如交通規(guī)則,上課時,做游戲時要遵守什么規(guī)則。對于繪本閱讀,應(yīng)該多研究。多學(xué)習(xí),讓孩子能快樂的學(xué),在學(xué)中玩,玩中學(xué)。
大班語言課教案《有趣的導(dǎo)游圖》含反思這篇文章共5190字。
第三篇:旅游區(qū)導(dǎo)游圖
旅游區(qū)導(dǎo)游圖
題目內(nèi)容: 問題描述:
設(shè)某個旅游區(qū)共有n個旅游景點(n≥10),每個旅游景點都和相鄰的m個旅游景點(m≥2,m 以(Vi ,Vj ,d)的形式從鍵盤輸入建立該旅游區(qū)的旅游景點圖,其中:Vi和Vj表示兩個不同的旅游景點,d表示這兩個景點之間的道路距離;該旅游景點圖采用鄰接鏈表存儲結(jié)構(gòu)。實現(xiàn)要求: ⑴ 旅游景點圖的輸出:分別以鄰接矩陣、鄰接鏈表的方式輸出該旅游景點圖。⑵ 相鄰景點查詢:假設(shè)對于每個景點,設(shè)置有簡易的信息查詢,要求能給出與該景點相鄰的所有景點(有直接的道路相通)及對應(yīng)的距離。 ⑶ 景點路線查詢:假設(shè)對于每個景點,設(shè)置有景點路線查詢,要求能給出從該景點出發(fā)到任一其它景點的最短簡單路徑及距離。 ⑷ 景點路線綜合查詢:對于該旅游區(qū)的任意兩個景點,找出它們之間的最短簡單路徑及距離。 ⑸ 最佳旅游路線確定:假設(shè)該旅游區(qū)的入口也是出口,請確定一條最佳的旅游線路,該線路必須經(jīng)過所有的旅游景點(有些景點可以重復(fù)經(jīng)過)且走的路最短。⑹ 設(shè)計一個菜單,上述操作要求都作為菜單中的主要菜單項。 代 碼 如 下: ································ #include“stdio.h” #include“malloc.h” #include “string.h” #define INFINITY 32767 /* 圖的最大權(quán)值,32767是整數(shù)表示的最大值*/ #define MAX_VEX 30 /* 最大頂點數(shù)目 */ #define MAX_VALUE 999999999 typedef int InfoType;typedef char VexType;typedef enum{DG=1, AG=2, WDG=3,WAG=4}GraphKind;/*枚舉常量定義旅游景點對應(yīng)的圖類型*/ 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; /*圖的當(dāng)前頂點數(shù)和弧數(shù) */ }MGraph; /*圖的鄰接鏈表轉(zhuǎn)換為矩陣后,圖的結(jié)構(gòu)定義 */ /*圖的鄰接矩陣存儲結(jié)構(gòu)中結(jié)點結(jié)構(gòu)體的定義*/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct Linknode { char adjvex; /*鄰接點在頭結(jié)點數(shù)組中的位置(鄰接邊的弧頭頂點序號)*/ InfoType info; /*與邊或弧相關(guān)的信息, 如權(quán)值 */ struct Linknode *nextarc; /*指向下一個表結(jié)點 */ }LinkNode; /*鄰接邊單鏈表的結(jié)點結(jié)構(gòu)體 */ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct VexNode { char data; /*數(shù)據(jù)域存儲頂點信息 */ int indegree; /*頂點的度, 有向圖是入度或出度或沒有 */ LinkNode *firstarc; /*鏈域指向第一個表結(jié)點(鄰接邊頭指針)*/ }VexNode; /*頂點結(jié)點類型定義 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct { GraphKind kind; /*圖的種類標(biāo)志 */ int vexnum; /*頂點個數(shù) */ VexNode AdjList[MAX_VEX]; /*鄰接表數(shù)組 */ }ALGraph; /*圖的結(jié)構(gòu)定義 */ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct { VexType vex1, vex2; /*弧或邊所依附的兩個頂點 */ InfoType info; /*與邊或弧相關(guān)的信息, 如權(quán)值 */ }ArcType; /*弧或邊的結(jié)構(gòu)定義 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Init_Graph(ALGraph * G) /*圖的初始化 */ { do { printf(“請確認(rèn)旅游景點的類型(1:無向圖。2:有向圖。3:帶權(quán)有向圖。4:帶權(quán)無向圖):n”); } scanf(“%d”, &G->kind);if(G->kind==4)printf(“旅游區(qū)導(dǎo)游圖的類型:帶權(quán)無向圖n”);else { } printf(“ ●您選擇的圖的類型不對●n”); while(G->kind!=4);G->vexnum=0; /* 初始化頂點個數(shù)為0 */ } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int LocateVex(ALGraph *G, VexType vp) /*圖的頂點定位(圖的頂點定位實際上是確定一個頂點在AdjList數(shù)組中的某個元素的data域內(nèi)容。)*/ { int k;for(k=0;k /*如果存在此頂點返回頂點數(shù)組下標(biāo)值 return(-1); /*如果沒有則返回-1(圖中無此頂點) */ */ } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int AddVertex(ALGraph *G, char vp) /*向圖中增加頂點(向圖中增加一個頂點的操作,在AdjList數(shù)組的末尾增加一個數(shù)據(jù)元素。)*/ { int k;if(G->vexnum>=MAX_VEX){ } if(LocateVex(G,vp)!=-1){ printf(“所要添加的頂點已存在!n”);printf(“圖中頂點數(shù)已達(dá)到最多!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)/*向圖中增加一條邊(弧)(根據(jù)給定的弧或邊所依附的頂點,修改單鏈表:無向圖修改兩個單鏈表;)*/ { int k,j;LinkNode *p,*q;k=LocateVex(G,arc->vex1);j=LocateVex(G,arc->vex2);if(k==-1||j==-1) /*先判斷是否兩個頂點重復(fù)或者是否存在這兩個頂點*/ { printf(“該兩個景點為一點或兩景點都不存在,錯誤!n”); return(-1);} p=(LinkNode *)malloc(sizeof(LinkNode));p->adjvex=arc->vex1;p->info=arc->info;p->nextarc=NULL; /* 邊的起始表結(jié)點賦值 */ q=(LinkNode *)malloc(sizeof(LinkNode));q->adjvex=arc->vex2;q->info=arc->info; q->nextarc=NULL; /* 邊的末尾表結(jié)點賦值 */ 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()/*采用鄰接鏈表作為圖的存儲結(jié)構(gòu)建立帶權(quán)有向圖*/ { char stack1[MAX_VEX],stack2[MAX_VEX],vex,k1,k2;int weight;ALGraph *G;ArcType *p;printf(“首先對旅游區(qū)導(dǎo)游圖進(jìn)行初始化:nn”);G=(ALGraph *)malloc(sizeof(ALGraph));//申請動態(tài)結(jié)點空間 Init_Graph(G);printf(“n請輸入旅游區(qū)導(dǎo)游圖的各個旅游景點代碼(以字符的形式出入),當(dāng)輸入0時作為結(jié)束標(biāo)志n”);while(1){ scanf(“%s”,stack1);/*以字符串的形式輸入存儲旅游區(qū)景點,一次一個的存儲輸入的景點存到數(shù)組中之后又在圖中插入該頂點,當(dāng)輸入0時結(jié)束*/ vex=stack1[0]; /*用字符串可以區(qū)別結(jié)束標(biāo)識,用字符存到數(shù)組中不易設(shè)置結(jié)束標(biāo)志*/ } if(vex=='0')break;else AddVertex(G,vex);p=(ArcType *)malloc(sizeof(ArcType));printf(“n 從鍵盤輸入以(Vi ,Vj ,d)的形式建立該旅游區(qū)的旅游景點圖,n 其中: Vi和Vj表示兩個不同的旅游景點, d表示這兩個景點之間的道路距離;n 該旅游景點圖采用鄰接鏈表存儲結(jié)構(gòu)(當(dāng)輸入第一個頂點是0時表示結(jié)束):n”); while(1){ scanf(“%s”,stack1);k1=stack1[0]; if(k1=='0') /* 輸入第一個頂點,0結(jié)束 */ break; else { scanf(“%s”,stack2);scanf(“%d”,&weight); /* 輸入第二個頂點和權(quán)值 */ k2=stack2[0];p->vex1=k1;p->vex2=k2;p->info=weight; AddArc(G,p);printf(“n請繼續(xù)輸入下一條道路!n”);} } return(G);} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void output_ALGraph(ALGraph *G) // 2:輸出圖的鄰接鏈表 { int j;LinkNode *p; printf(“n旅游區(qū)導(dǎo)游圖的鄰接鏈表景點輸出表示如下:n”);for(j=0;j printf(“%c”,G->AdjList[j].data); p=G->AdjList[j].firstarc; while(p!=NULL) //輸出一個鄰接鏈表的景點之后,繼續(xù)輸出他的其他鄰接景點 } { } printf(“-> ”);printf(“<%c,%d>”,p->adjvex,p->info);p=p->nextarc;printf(“nn”);} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void output_Find_ALGraph(ALGraph *G) // 4:相鄰景點查詢并輸出 { int j;LinkNode *p; //定義鄰接邊單鏈表結(jié)點p printf(“請輸入您要查詢的景點(頂點數(shù)組下標(biāo)值):n”); //從輸入的景點開始找和其相鄰的景點并輸出權(quá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個景點和他下一個相鄰的景點和權(quán)值 p=p->nextarc; //指向下一個結(jié)點的地址,使全部與G->AdjList[j].data直接連通的頂點全部輸出,NULL時截止 } printf(“nn”);} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void ListToMat(ALGraph G, MGraph &g) /*將鄰接鏈表轉(zhuǎn)換成鄰接矩陣 */ { 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 /*把鏈表的數(shù)組頂點保存到數(shù)組vexs[i]} for(i=0;i p=G.AdjList[i].firstarc;while(p!=NULL) { k=LocateVex(&G,p->adjvex); /*取和p相鄰的頂點下標(biāo)值用于鄰接*/ 中*/ 矩陣的下標(biāo)值 */ g.arcs[i][k]=g.arcs[k][i]=p->info;/*把權(quán)值賦值給二維數(shù)組用于矩陣輸出 */ */ } } p=p->nextarc; /*指向下一個鄰接表結(jié)點 } g.vexnum=G.vexnum;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void display(ALGraph *G,MGraph g) /*3:輸出鄰接矩陣 */ { int i,j;ListToMat(*G, g); /*將鄰接鏈表轉(zhuǎn)換成鄰接矩陣 */ 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]); /*每個權(quán)值占有8個字符,負(fù)號表示左端對齊 */ } printf(“n”);//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void dijkshort_One(ALGraph F, MGraph G,int v0,int distance[], int path[])/* 帶權(quán)圖G從頂點v0到其他定點的最短距離distance和最短路徑前驅(qū)結(jié)點的下標(biāo)path*/ //帶權(quán)圖F從下標(biāo)v0到其他頂點的最短距離diatance和最短路徑下標(biāo)path,path中存放了從輸入的v0到其他各個頂點的最短路徑的前一個頂點的下標(biāo) //基于狄克斯特拉函數(shù)的設(shè)計 { 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; //標(biāo)記頂點v0已從集合T加入到集合S中(以v0為下標(biāo)值的頂點)for(i=0;i minDis=INFINITY;for(j=0;j { minDis=distance[j]; u=j;} } S[u]=1; //標(biāo)記頂點u已從集合T加入到集合S中(以u為下標(biāo)值的頂點) for(j=0;j // /修改從v0到其他頂點的最短距離和最短路徑 if(S[j]==0&&G.arcs[u][j] } } //頂點v0到其他所有的頂點的最短距離已經(jīng)保存在數(shù)組distance中 printf(“查詢結(jié)果是: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(“ 途中經(jīng)過的景點有:”);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[])/*帶權(quán)圖G從頂點v0到其他定點的最短距離distance和最短路徑前驅(qū)結(jié)點的下標(biāo)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(“輸入你要查詢的另外一個景點(下標(biāo)值):”);scanf(“%d”,&d);printf(“你要查詢的另外一個景點是:%cn”,G.vexs[d]);printf(“n查詢結(jié)果:n”);//輸出結(jié)果 if(path[d]!=-1){ printf(“從景點%c到景點%c”,F.AdjList[v0].data,G.vexs[d]); p=path[d];printf(“的最短距離是: %d”,distance[d]);printf(“ 途中經(jīng)過的景點有:”);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最佳旅游路線景點下標(biāo)值是: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(“ !歡迎使用旅游區(qū)導(dǎo)游系統(tǒng) !n”);printf(“ ============================n”);do { printf(“n請選擇對該旅游區(qū)導(dǎo)游圖的操作→nn”); printf(“ ┏━━━━━━━━━━━━━━━━━━━━━┓n”);printf(“ ┃ 1.建立旅游區(qū)導(dǎo)游圖的鄰接鏈表存儲 ┃n”);printf(“ ┃ 2.旅游區(qū)導(dǎo)游圖的鄰接鏈表的輸出 ┃n”);printf(“ ┃ 3.旅游區(qū)導(dǎo)游圖的鄰接矩陣的輸出 ┃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));/*動態(tài)申請圖G的內(nèi)存空間*/ G=Create_ALGraph();printf(“nn”);break; } case 2: { } { printf(“n旅游導(dǎo)游圖的鄰接鏈表表示如下所示:n”);output_ALGraph(G);printf(“nn”);break;case 3: printf(“n旅游區(qū)導(dǎo)游圖的鄰接矩陣表示如下所示:n”);printf(“n∞表示兩景點之間不存在連通的路線n”);printf(“n數(shù)值表示兩景點之間的路線長度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(“輸入你要查詢的景點(下標(biāo)值):”);scanf(“ %d”,&v0);dijkshort_One(*G,g,v0,distance,path);break;printf(“輸入你要查詢的開始景點(下標(biāo)值):”);scanf(“ %d”,&v0);dijkshort_Two(*G,g,v0,distance,path);break;printf(“輸入你要查詢的開始景點(下標(biāo)值):”);scanf(“%d”,&v0);printf(“景點是%c ”,G->AdjList[v0].data);best_path(G,v0);break; 課程設(shè)計任務(wù)書 2013~2014學(xué)年第 1 學(xué)期 學(xué)生姓名:專業(yè)班級:2012網(wǎng)絡(luò)工程(1)班 指導(dǎo)教師:馮珊工作部門:計算機(jī)學(xué)院 一、課程設(shè)計題目: 公園導(dǎo)游圖 二、課程設(shè)計內(nèi)容 給出一張某公園的導(dǎo)游圖,游客通過終端詢問可知:從某一景點到另一景點的最短路徑。游客從公園大門進(jìn)入,選一條最佳路線,使游客可以不重復(fù)地游覽各景點,最后回到出口(出口就在入口旁邊)。 三、進(jìn)度安排 1. 初步完成總體設(shè)計,搭好框架,確定人機(jī)對話的界面,確定函數(shù)個數(shù); 2. 完成最低要求:建立一個文件,包括5個景點情況,能完成遍歷功能; 3. 進(jìn)一步要求:進(jìn)一步擴(kuò)充景點數(shù)目,畫出景點圖,有興趣的同學(xué)可以自己擴(kuò)充系統(tǒng)功能。 四、基本要求 1.界面友好,函數(shù)功能要劃分好 2.總體設(shè)計應(yīng)畫一流程圖 3.程序要加必要的注釋 4.要提供程序測試方案 5.程序一定要經(jīng)得起測試,寧可功能少一些,也要能運行起來,不能運行的程序是沒有價 值的。 數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 實驗四:圖(內(nèi)容:某公園導(dǎo)游圖) 一、問題描述: 公園導(dǎo)游系統(tǒng):給出一張某公園的導(dǎo)游圖,游客通過終端詢問可知︰從某一景到另一景點的最短路徑。游客從公園大門進(jìn)入,選一條最佳路線,使游客可以不重復(fù)地游覽各景點,最后回到出口(出口就在入口旁邊)。 二、設(shè)計描述: 1.輸入導(dǎo)游圖的算法(存儲方法).本程序特地設(shè)計函數(shù)void initgraph()用于實現(xiàn)鍵盤輸入圖的結(jié)構(gòu); 2.可訪問導(dǎo)游圖中任一景點的算法.為此設(shè)計了函數(shù)void vist(GraphMatrix graph)用于實現(xiàn)訪問任一景點的信息; 3.最短路徑從一景點到另一景點的算法。利用floyd算法-實現(xiàn)每一對景點間的最短路徑。并利用void outgraph()函數(shù)實現(xiàn)顯示起始點和終點間的最短路徑和其長度; 三、程序清單: #include typedef char VexType;數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 typedef float AdjType;typedef struct //定義圖結(jié)構(gòu) { int n; /* 圖的頂點個數(shù) */ VexType vexs[MAXVEX]; /* 頂點信息 */ AdjType arcs[MAXVEX][MAXVEX]; /* 邊信息 */ } GraphMatrix;GraphMatrix graph; //定義一個圖graph typedef struct //定義最短路徑ShortPath結(jié)構(gòu) { AdjType a[MAXVEX][MAXVEX]; /* 關(guān)系矩陣A,存放每對頂點間最短路徑長度 */ int nextvex[MAXVEX][MAXVEX]; /* nextvex[i][j]存放vi到vj最短路徑上vi的后繼頂點的下標(biāo)值 */ } ShortPath;ShortPath path; //定義路徑path void floyd(GraphMatrix * pgraph, ShortPath * ppath) //floyd算法-用于實現(xiàn)每一對景點間的最短路徑 { 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;數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號: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()函數(shù)用于實現(xiàn)顯示起始點和終點間的最短路徑和其長度 { int c,b,i;cout< //輸入要查找起始點和終點(本程序限于編號(int型))cout< //通過path.a[c][b]把路徑長度賦給i 數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 cout<<“該路徑總長為:”;cout< //輸出路徑長度 cout<<“所得路徑順序為”;cout< //此處輸出路徑的第一個編號 c=path.nextvex[c][b]; for(;c!=b;c=path.nextvex[c][b]) //循環(huán)順序輸出路徑始點和終點之間的景點編號 cout<<“,”< //再輸出路徑的最后一個編號 cout< //該函數(shù)用于實現(xiàn)鍵盤輸入圖的結(jié)構(gòu) { int i,m,j;printf(“請輸入公園景點的個數(shù):”); //圖結(jié)點的個數(shù)賦給graph.n scanf(“%d”,&m);graph.n=m;for(i=0;i //循環(huán)輸入結(jié)點頂點信息 { printf(“請輸入第%i個景點信息:”,i);//為了簡明起見此程序結(jié)點頂點信息限于字符型 cin>>graph.vexs[i];} printf(“請輸入公園的鄰接矩陣的信息n”);//循環(huán)輸入圖的鄰接矩陣信息(也就是輸入一個二維數(shù)組)for(i=0;i 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 for(j=0;j printf(“請輸入第%d行,第%d列的元素:”,i+1,j+1);cin>>graph.arcs[i][j];} } void vist(GraphMatrix graph) //函數(shù)用于實現(xiàn)訪問任一景點的信息 { int i; cout< cout<<“你想知道哪個景點的信息:”;//注意輸入的是景點的編號 cin>>i; cout< cout<<“景點信息查詢結(jié)果為:”; cout< cout< //用于判斷是否繼續(xù)執(zhí)行特定的下一步程序 {int a;cout<<“還想繼續(xù)查詢?(1&0)”;cin>>a;return a;} int main()數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 { int i,j; initgraph(); //initgraph()函數(shù)來實現(xiàn)鍵盤輸入圖的結(jié)構(gòu) floyd(&graph, &path); cout<<“為了驗證下面運算結(jié)果的方便,循環(huán)輸出nextvex[i][j]數(shù)組”; for(i = 0;i < graph.n;i++) { for(j = 0;j < graph.n;j++) //為了驗證下面運算結(jié)果的方便,循環(huán)輸出nextvex[i][j]數(shù)組 printf(“%d ”, path.nextvex[i][j]); //nextvex[i][j]存放vi到vj最短路徑上vi的后繼頂點的下標(biāo)值 putchar('n'); } cout< outgraph(); while(jud()) outgraph(); //outgraph()函數(shù)用于實現(xiàn)顯示起始點和終點間的最短路徑和其長度 vist(graph); //函數(shù)用于實現(xiàn)訪問任一景點的信息 cout< while(jud()) vist(graph); cout< return 0;} 數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037 驗四:圖(內(nèi)容:某公園導(dǎo)游圖) .問題描述 ① 給出一張某公園的導(dǎo)游圖,游客通過終端詢問可知: (1)從某一景點到另一景點的最短路徑。 (2)游客從公園大門進(jìn)入,選一條最佳路線,使游客可以不重復(fù)地游覽景點,最后回到出口(出口就在入口處旁邊)。 .要求 ② 將導(dǎo)游圖看作一張帶權(quán)無向圖,頂點表示公園的各個景點,邊表示各景點之間的道路,邊上的權(quán)值給游客。 .實現(xiàn)提示 ③ (1)第一問實際是最短路徑問題,如果有幾條路徑長度相同,可選擇途徑景點較少的路徑提供給游客。 (2)第二問可采用深度優(yōu)先搜索,如果有多種路徑可選擇,則選擇帶權(quán)路徑最小的路線提供給游客。 .選做內(nèi)容 ④ 可以把各種路徑都顯示給游客,由游客自己選擇游覽路線。數(shù)據(jù)結(jié)構(gòu)實驗報告 班級:06軟件工程 姓名:周鄧雄 學(xué)號:06517037第四篇:公園導(dǎo)游圖 課程設(shè)計任務(wù)書
第五篇:某數(shù)據(jù)結(jié)構(gòu)課程設(shè)計公園導(dǎo)游圖