![教學(xué)計(jì)劃的編制問題(實(shí)驗(yàn)10實(shí)驗(yàn)報告)_第1頁](http://file4.renrendoc.com/view/9c98aaf4278e4404bdcc6b905c6de2cb/9c98aaf4278e4404bdcc6b905c6de2cb1.gif)
![教學(xué)計(jì)劃的編制問題(實(shí)驗(yàn)10實(shí)驗(yàn)報告)_第2頁](http://file4.renrendoc.com/view/9c98aaf4278e4404bdcc6b905c6de2cb/9c98aaf4278e4404bdcc6b905c6de2cb2.gif)
![教學(xué)計(jì)劃的編制問題(實(shí)驗(yàn)10實(shí)驗(yàn)報告)_第3頁](http://file4.renrendoc.com/view/9c98aaf4278e4404bdcc6b905c6de2cb/9c98aaf4278e4404bdcc6b905c6de2cb3.gif)
![教學(xué)計(jì)劃的編制問題(實(shí)驗(yàn)10實(shí)驗(yàn)報告)_第4頁](http://file4.renrendoc.com/view/9c98aaf4278e4404bdcc6b905c6de2cb/9c98aaf4278e4404bdcc6b905c6de2cb4.gif)
![教學(xué)計(jì)劃的編制問題(實(shí)驗(yàn)10實(shí)驗(yàn)報告)_第5頁](http://file4.renrendoc.com/view/9c98aaf4278e4404bdcc6b905c6de2cb/9c98aaf4278e4404bdcc6b905c6de2cb5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告題目:教學(xué)計(jì)劃的編制問題姓名:楊維學(xué)號:20090810229班級:物聯(lián)網(wǎng)工程0901班指導(dǎo)老師:李曉鴻完成日期:2010年11月26日一、問題描述:若用有向網(wǎng)表示教學(xué)計(jì)劃,其中頂點(diǎn)表示某門課程,有向邊表示課程之間的先修關(guān)系(如果A課程是B課程的先修課程,那么A到B之間有一條有向邊從A指向B)。試設(shè)計(jì)一個教學(xué)計(jì)劃編制程序,獲取一個不沖突的線性的課程教學(xué)流程。(課程線性排列,每門課上課時其先修課程已經(jīng)被安排)。基本要求(1)輸入?yún)?shù):課程總數(shù),每門課的課程號(固定占3位的字母數(shù)字串)和直接先修課的課程號。(2)若根據(jù)輸入條件問題無解,則報告適當(dāng)?shù)男畔?;否則將教學(xué)計(jì)劃輸出到用戶指定的文件中。二.需求分析:1、本程序需要基于圖的基本操作來實(shí)現(xiàn)三.概要設(shè)計(jì)抽象數(shù)據(jù)類型:為實(shí)現(xiàn)上述功能需建立一個結(jié)點(diǎn)類,線性表類,圖類。算法的基本思想:圖的構(gòu)建:建立一個結(jié)點(diǎn)類,類的元素有字符型變量用來存儲字母,整形變量用來存儲位置,該類型的指針,指向下一個元素。建立一個線性表類,完成線性表的構(gòu)建。建立一個圖類,完成圖的信息的讀取,(如有n個點(diǎn),則建立n個線性表,將每個結(jié)點(diǎn)與其指向的結(jié)點(diǎn)組成一個線性表,并記錄線性表的長度)。Topsort算法:先計(jì)算每個點(diǎn)的入度,保存在數(shù)組中。找到第一個入度為0的點(diǎn),將該點(diǎn)所連的各點(diǎn)的入度減一。再在這些點(diǎn)中找入度為0的點(diǎn)。如果找到,重復(fù)上述操作。如果找不到,則跳出while循環(huán),再搜索其他的點(diǎn),看入度是否為0。再重復(fù)上述操作,如果所有的入度為0的點(diǎn)都被尋找到,但個數(shù)少于輸入頂點(diǎn)的個數(shù),說明該圖存在環(huán)。程序的流程:輸入模塊:讀入圖的信息(頂點(diǎn)和邊,用線性表進(jìn)行存儲)。處理模塊:topsort算法。輸出模塊:將結(jié)果輸出。四.詳細(xì)設(shè)計(jì):算法的具體步驟:classNode{//結(jié)點(diǎn)類public:stringnode;intposition;//位置Node*next;boolvisit;//是否被訪問Node(){visit=false;next=NULL;position=0;node='';}};classLine{//線性表類public: intnum; Node*head; Node*rear; Node*fence; Line(){num=0;head=fence=rear=newNode();} voidinsert(intv,stringch){//插入元素 Node*current=newNode(); current->node=ch; current->position=v; fence->next=current; fence=current; num++; }};classGraph{//圖類private: intnumVertex; intnumEdge; Line*line;public: Graph(intv,inte){numVertex=v;numEdge=e;line=newLine[v];} voidpushVertex(){//讀入點(diǎn) stringch; for(inti=0;i<numVertex;i++){ cout<<"請輸入頂點(diǎn)"<<i+1<<":"; cin>>ch; line[i].head->node=ch; line[i].head->position=i; } } voidpushEdge(){//讀入邊 stringch1,ch2; intpos1,pos2; for(inti=0;i<numEdge;i++) { cout<<"請輸入邊"<<i+1<<":"; cin>>ch1>>ch2; for(intj=0;j<numVertex;j++){ if(line[j].head->node==ch1) pos1=j;//找到該字母對應(yīng)的位置 if(line[j].head->node==ch2){ pos2=line[j].head->position; break; } } line[pos1].insert(pos2,ch2); } } voidtopsort(){//拓?fù)渑判? inti; int*d=newint[numVertex]; for(i=0;i<numVertex;i++) d[i]=0;//數(shù)組初始化 for(i=0;i<numVertex;i++){ Node*p=line[i].head; while(p->next!=NULL){ d[p->next->position]++;//計(jì)算每個點(diǎn)的入度 p=p->next; } } inttop=-1,m=0,j,k; for(i=0;i<numVertex;i++){ if(d[i]==0){ d[i]=top;//找到第一個入度為0的點(diǎn) top=i; } while(top!=-1){j=top;top=d[top]; cout<<line[j].head->node<<""; m++; Node*p=line[j].head; while(p->next!=NULL){ k=p->next->position; d[k]--;//當(dāng)起點(diǎn)被刪除,時后面的點(diǎn)的入度-1 if(d[k]==0){ d[k]=top; top=k; } p=p->next; } } }cout<<endl; if(m<numVertex)//輸出點(diǎn)的個數(shù)小于輸入點(diǎn)的個數(shù),不能完全遍歷 cout<<"網(wǎng)絡(luò)存在回路"<<endl; delete[]d; }};intmain(){intn,m; cout<<"請輸入節(jié)點(diǎn)的個數(shù)和邊的個數(shù)"<<endl; cin>>n>>m; GraphG(n,m); G.pushVertex(); G.pushEdge(); G.topsort(); system("pause");return0;}五.調(diào)試分析:將建立的線性表輸出來檢驗(yàn)圖的信息是否完全被讀入,構(gòu)建是否正確。六.測試結(jié)果:七.實(shí)驗(yàn)心得:1、本實(shí)驗(yàn)是在圖的遍歷問題的基礎(chǔ)上做的,圖的構(gòu)建大部分是采用圖的遍歷問題中的代碼(不過要將結(jié)點(diǎn)類中的char改為string型),自己另外寫了topsort函數(shù),就完成了整個程序。2、topsort函數(shù)中一開始采用的方法是找到一個入度為0的點(diǎn),完成相應(yīng)的操作后,重新進(jìn)行搜索,后來改進(jìn)代碼,先搜索入度為0的點(diǎn)后面連接的點(diǎn),這樣減少了算法復(fù)雜度。八、附件教學(xué)計(jì)劃的編制問題.cpp#include<iostream>#include<string.h>usingnamespacestd;classNode{//結(jié)點(diǎn)類public:stringnode;intposition;//位置Node*next;boolvisit;//是否被訪問Node(){visit=false;next=NULL;position=0;node='';}};classLine{//線性表類public: intnum; Node*head; Node*rear; Node*fence; Line(){num=0;head=fence=rear=newNode();} voidinsert(intv,stringch){//插入元素 Node*current=newNode(); current->node=ch; current->position=v; fence->next=current; fence=current; num++; }};classGraph{//圖類private: intnumVertex; intnumEdge; Line*line;public: Graph(intv,inte){numVertex=v;numEdge=e;line=newLine[v];} voidpushVertex(){//讀入點(diǎn) stringch; for(inti=0;i<numVertex;i++){ cout<<"請輸入頂點(diǎn)"<<i+1<<":"; cin>>ch; line[i].head->node=ch; line[i].head->position=i; } } voidpushEdge(){//讀入邊 stringch1,ch2; intpos1,pos2; for(inti=0;i<numEdge;i++) { cout<<"請輸入邊"<<i+1<<":"; cin>>ch1>>ch2; for(intj=0;j<numVertex;j++){ if(line[j].head->node==ch1) pos1=j;//找到該字母對應(yīng)的位置 if(line[j].head->node==ch2){ pos2=line[j].head->position; break; } } line[pos1].insert(pos2,ch2); } } voidtopsort(){//拓?fù)渑判? inti; int*d=newint[numVertex]; for(i=0;i<numVertex;i++) d[i]=0;//數(shù)組初始化 for(i=0;i<numVertex;i++){ Node*p=line[i].head; while(p->next!=NULL){ d[p->next->position]++;//計(jì)算每個點(diǎn)的入度 p=p->next; } } inttop=-1,m=0,j,k; for(i=0;i<numVertex;i++){ if(d[i]==0){ d[i]=top;//找到第一個入度為0的點(diǎn) top=i; } while(top!=-1){j=top;top=d[top]; cout<<line[j].head->node<<""; m++; Node*p=line[j].head; while(p->next!=NULL){ k=p->next->position; d[k]--;//當(dāng)起點(diǎn)被刪除,時后面的點(diǎn)的入度-1 if(d[k]==0){ d[k]=top; top=k; } p=p->next; } }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年元器件測試儀器合作協(xié)議書
- 2025年硫精砂合作協(xié)議書
- 2025年農(nóng)業(yè)科學(xué)研究與試驗(yàn)發(fā)展服務(wù)合作協(xié)議書
- 2025年二次加工材相關(guān)板材合作協(xié)議書
- 2024-2025學(xué)年四川省成都市崇州市四年級(上)期末數(shù)學(xué)試卷
- 2025年中國建設(shè)銀行企業(yè)網(wǎng)上銀行國際結(jié)算協(xié)議(2篇)
- 2025年親屬的股權(quán)轉(zhuǎn)讓協(xié)議范文(2篇)
- 2025年二手車帶牌轉(zhuǎn)讓協(xié)議模板(2篇)
- 2025年個人自建房購房合同標(biāo)準(zhǔn)版本(2篇)
- 2025年五年級1班第一學(xué)期班主任工作總結(jié)模版(2篇)
- 全面新編部編版四年級下冊語文教材解讀分析
- 江蘇農(nóng)牧科技職業(yè)學(xué)院單招《職業(yè)技能測試》參考試題庫(含答案)
- 三年級上冊脫式計(jì)算100題及答案
- VDA6.3 2023過程審核教材
- 烹飪實(shí)訓(xùn)室安全隱患分析報告
- 《金屬加工的基礎(chǔ)》課件
- 運(yùn)輸行業(yè)春節(jié)安全生產(chǎn)培訓(xùn) 文明駕駛保平安
- 體驗(yàn)式沙盤-收獲季節(jié)
- 老年護(hù)理陪護(hù)培訓(xùn)課件
- 2019年420聯(lián)考《申論》真題(山西卷)試卷(鄉(xiāng)鎮(zhèn)卷)及答案
- 醫(yī)院投訴糾紛及處理記錄表
評論
0/150
提交評論