版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
HUNANUNIVERSITY
課程實(shí)習(xí)報(bào)告
題目:教學(xué)計(jì)劃編制問(wèn)題
學(xué)生姓名______________________________________
學(xué)生學(xué)號(hào)______________________________
專業(yè)班級(jí)______________________________
指導(dǎo)老師___________李曉鴻_________________
完成日期_____________________________________
背景
大學(xué)的每個(gè)專業(yè)都要制定教學(xué)計(jì)劃。假設(shè)任何專業(yè)都有固定的學(xué)習(xí)年限,每學(xué)年含兩學(xué)
期,每學(xué)期的時(shí)間長(zhǎng)度和學(xué)分上限值均相等。每個(gè)專業(yè)開設(shè)的課程都是確定的,而且課程在
開設(shè)時(shí)間的安排必須滿足先修關(guān)系。每門課程有哪些先修課程是確定的,可以有任意多門,
也可以沒有。每門課恰好占一個(gè)學(xué)期。試在這樣的前提下設(shè)計(jì)一個(gè)教學(xué)計(jì)劃編制程序。
問(wèn)題描述
若用有向網(wǎng)表示教學(xué)計(jì)劃,其中頂點(diǎn)表示某門課程,有向邊表示課程之間的先修關(guān)系(如
果A課程是B課程的先修課程,那么A到B之間有一條有向邊從A指向B)。試設(shè)計(jì)一個(gè)
教學(xué)計(jì)劃編制程序,獲取一個(gè)不沖突的線性的課程教學(xué)流程。(課程線性排列,每門課上課
時(shí)其先修課程己經(jīng)被安排)。
基本要求
(1)輸入?yún)?shù):課程總數(shù),每門課的課程號(hào)(固定占3位的字母數(shù)字串)和直接先
修課的課程號(hào).
(2)若根據(jù)輸入條件問(wèn)題無(wú)解,則報(bào)告適當(dāng)?shù)男畔?;否則將教學(xué)計(jì)劃輸出到用戶指
定的文件中。
一、需求分析
根據(jù)課程間的依賴關(guān)系,制定課程安排計(jì)劃。按照用戶的輸入建立一個(gè)鄰接表,輸出拓
撲排序結(jié)果。按照用戶輸入的課程數(shù),學(xué)期數(shù),課程間的先后關(guān)系數(shù)目以及課程間兩兩間的
先后關(guān)系,程序執(zhí)行后會(huì)給出每學(xué)期應(yīng)學(xué)的課程順序。
(1)輸入的形式和輸入值的范圍:本程序要求首先輸入一個(gè)正整數(shù)值N,代表課程總數(shù),
然后依次輸入課程的代號(hào)(使用長(zhǎng)度為3位的字符串表示),每次輸入完該課程的代號(hào)后,
同時(shí)輸入先修的課程的代號(hào)。因此,用整數(shù)來(lái)存儲(chǔ)課程總數(shù),字符串來(lái)存儲(chǔ)課程代號(hào)。
(2)輸出的形式:根據(jù)輸入的數(shù)據(jù),進(jìn)行拓?fù)渑判?,若能成功,則輸出序列,表示應(yīng)學(xué)
的課程順序,若不能成功,則提示報(bào)錯(cuò)進(jìn)行課程調(diào)整。
(3)程序所能達(dá)到的功能:按照用戶的輸入,輸出拓?fù)渑判蚪Y(jié)果。按照用戶的輸入,給
出每學(xué)期應(yīng)學(xué)的課程。
(4)測(cè)試數(shù)據(jù):
輸入請(qǐng)輸入課程數(shù)目:〃提示輸入
6
請(qǐng)輸入課程:〃提示輸入
S1
是否有先修課程(T/F)
F//表示沒有
請(qǐng)輸入課程:〃提示輸入
S2
是否有先修課程(T/F)
T//表不有
先修課程是:〃提示輸入
S1
輸出課程排列完成,為S1,S3,S5,S2,S6,S7,S4//排列成功
課程有誤,請(qǐng)重新調(diào)整〃失敗
二、概要設(shè)計(jì)
L抽象數(shù)據(jù)類型
ADT圖
數(shù)據(jù)對(duì)象:V,R(圖是由一個(gè)頂點(diǎn)集V和一個(gè)弧集R構(gòu)成的數(shù)據(jù)結(jié)構(gòu))
數(shù)據(jù)關(guān)系:Graph=(V,R)
VR={<v,w>|v,wwV且P(v,w)}
基本操作:
intn()=0;//返回圖節(jié)點(diǎn)數(shù)
inte()=0;〃返回圖邊數(shù)
intfirst(int)=0;〃返回該節(jié)點(diǎn)的第一條鄰邊
voidsetEdge(intvl,intv2)〃力口邊
intnext(int,int)=0;〃返回下一條鄰邊
intgetMark(int)=0;〃有標(biāo)記嗎
voidsetMark(int,int)=0;//設(shè)置標(biāo)記
2.程序的流程
程序由三個(gè)模塊組成:
(1)初始化模塊:首先輸入課程總數(shù),輸入課程編號(hào)以及每個(gè)課程的先修課程,把
這種帶有先決條件的線性關(guān)系存入圖中;
(2)拓?fù)淠K:對(duì)圖做拓?fù)渑判颍?/p>
(3)輸出模塊:輸出拓?fù)渑判虻慕Y(jié)果,若成功,輸出排序后的序列,若不成功,則
輸出錯(cuò)誤。
3.算法的基本思想
(1)拓?fù)渌惴ǎ赫业降谝粋€(gè)入度為0的點(diǎn),從有向圖中刪去此頂點(diǎn)以及所有以它為尾的弧,
再在這些點(diǎn)中找入度為0的點(diǎn)。重復(fù)上述操作,直至圖空,或者圖不空但找不到無(wú)前驅(qū)的
頂點(diǎn)為止。如果圖空,則說(shuō)明課程可以安排成功,輸出序列。如果不空,說(shuō)明課程安排失敗,
輸出失敗。
(2)圖的存儲(chǔ):用鄰接矩陣來(lái)存儲(chǔ)
4.設(shè)計(jì)思路
先對(duì)課程編號(hào)及其先修課程編號(hào)進(jìn)行輸入。利用拓?fù)渑判驅(qū)φn程先后順序進(jìn)行分析,但
當(dāng)又向圖中存在環(huán)時(shí),無(wú)法查找該圖的一個(gè)拓?fù)渑判颍?dāng)圖中的所有頂點(diǎn)全部輸出,表示對(duì)
該圖排序成功,實(shí)現(xiàn)拓?fù)渑判蛩惴〞r(shí)。根據(jù)課程的先后關(guān)系,對(duì)個(gè)學(xué)期的課程進(jìn)行排序,輸
出。
三、詳細(xì)設(shè)計(jì)
(1)圖的存儲(chǔ):用鄰接矩陣來(lái)存儲(chǔ)
classGraphm:publicGraph
(
private:
intnumVertex,numEdge;
int**matrix;
int*mark;
public:
Graphm(intnumVert)
(
inti,j;
numVertex=numVert;
numEdge=0;
mark=newint[numVert];
for(i=0;i<numVertex;i++)
mark[i]=UNVISITED;
matrix=(int**)newint*[numVertex];
for(i=0;i<numVertex;i++)
matrix[i]=newint[numVertex];
for(i=0;i<numVertex;i++)
for(intj=0;j<numVertex;j++)matrix[i][j]=0;
)
(2)拓?fù)渌惴?。找到第一個(gè)入度為0的點(diǎn),從有向圖中刪去此頂點(diǎn)以及所有以
它為尾的弧,再在這些點(diǎn)中找入度為0的點(diǎn)。重復(fù)上述操作,直至圖空,或者
圖不空但找不到無(wú)前驅(qū)的頂點(diǎn)為止。如果圖空,則說(shuō)明課程可以安排成功,輸
出序列。如果不空,說(shuō)明課程安排失敗,輸出失敗。
voidtopsort(Graph*G,Queue<int>*Q){
intCount[G->n()];
intv,w;
for(v=0;v<G->n();v++)Count[v]=0;
for(v=0;v<G->n();v++)//Processedges
for(w=G->first(v);w<G->n();w=G->next(v,w))
Count[w]++;//Addtov2'scount
for(v=0;v<G->n();v++)//InitializeQ
if(Count[v]==0)//Noprereqs
Q->enqueue(v);
while(Q->length()!=0){
Q->dequeue(v);
printout(v);//PreVisitforV
for(w=G->first(v);w<G->n();w=G->next(v,w))
(
Count[w]―;//Onelessprereq
if(Count[w]==0)//Nowfree
Q->enqueue(w);
)
}
(3)圖的基本操作
intfirst(intv)
(
inti;
for(i=0;i<numVertex;i++)
if(matrix[v][i]!=0)
returni;
returni;
)
intnext(intvl,intv2)
(
inti;
for(i=v2+l;i<numVertex;i++)
if(matrix[vl][i]!=0)
returni;
returni;
)
voidsetEdge(intvl,intv2)
(
if(matrix[vl][v2]==0)
numEdge++;
matrix[vl][v2]=1;
)
intn()
(
returnnumVertex;
)
inte()
returnnumEdge;
intgetMark(intv)
(
returnmark[v];
)
voidsetMark(intv,intval)
(
mark[v]=val;
(4)算法的時(shí)空分析
鄰接矩陣的空間代價(jià)為?(IW2),減邊的拓?fù)渑判蛩惴〞r(shí)間待見為?(V+E)。
(5)函數(shù)的調(diào)用關(guān)系圖
<■提示用戶輸入課程總數(shù)
輸入課程代號(hào)和先修課程代號(hào)
主程序W
一拓?fù)渑判?/p>
輸出
(6)輸入和輸出的格式
輸入請(qǐng)輸入課程數(shù)目:〃提示輸入
6
請(qǐng)輸入課程:〃提示輸入
S1
是否有先修課程(T/F)
F//表示沒有
請(qǐng)輸入課程:〃提示輸入
S2
是否有先修課程(T/F)
T〃表示有
先修課程是:〃提示輸入
S1
輸出
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)勞動(dòng)合同樣本2篇
- 旅游區(qū)租賃管理合同3篇
- 擋土墻施工合同范本3篇
- 新版住宿酒店合同3篇
- 改正錯(cuò)誤承諾書3篇
- 攪拌機(jī)購(gòu)買協(xié)議3篇
- 方式預(yù)售合同補(bǔ)充協(xié)議3篇
- 新項(xiàng)目建議立項(xiàng)3篇
- 政府采購(gòu)保密協(xié)議3篇
- 居民意見小區(qū)改進(jìn)措施3篇
- 支氣管動(dòng)脈造影護(hù)理
- 校園春季安全
- 2024-2025學(xué)年六上科學(xué)期末綜合檢測(cè)卷(含答案)
- 【MOOC】工程力學(xué)-浙江大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年湖南省公務(wù)員考試《行測(cè)》真題及答案解析
- 產(chǎn)房年終總結(jié)及明年計(jì)劃
- 北京交通大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法》2021-2022學(xué)年期末試卷
- 足球體育說(shuō)課
- 【粵教】八上地理知識(shí)點(diǎn)總結(jié)
- (完整版)八年級(jí)下冊(cè)所有古詩(shī)及文言文(人教版)
- 鋁合金攪拌摩擦焊的工藝研究
評(píng)論
0/150
提交評(píng)論