教學(xué)計(jì)劃編制數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第1頁(yè)
教學(xué)計(jì)劃編制數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第2頁(yè)
教學(xué)計(jì)劃編制數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第3頁(yè)
教學(xué)計(jì)劃編制數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第4頁(yè)
教學(xué)計(jì)劃編制數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)教學(xué)計(jì)劃編制問題(圖的應(yīng)用)班級(jí)學(xué)號(hào)21333 班 2133326學(xué)生麗提交日期2015 年 7 月 23 日成績(jī)計(jì)算機(jī)與通信工程學(xué)院目錄一 需求分析 11. 設(shè)計(jì)任務(wù) 12. 功能模塊圖 13. 流程圖 24. 目標(biāo)測(cè)試 2 二 詳細(xì)設(shè)計(jì) 41. 運(yùn)行環(huán)境 42. 開發(fā)工具 43. 涉及知識(shí)點(diǎn) 44. 數(shù)據(jù)結(jié)構(gòu)定義及基本操作 45. 函數(shù)調(diào)用關(guān)系圖 56. 偽碼流程 6 三 調(diào)試分析 91. 調(diào)試過程中遇到的問題與解決方法92算法的時(shí)空分析 93. 改進(jìn)思想 94. 經(jīng)驗(yàn)體會(huì) 9 四 用戶手冊(cè) 9 五 測(cè)試結(jié)果 111. 輸入 112. 輸出 14 六 附錄 16 七 參考文

2、獻(xiàn) 23一、需求分析1、設(shè)計(jì)任務(wù) 教學(xué)計(jì)劃編制問題(圖的應(yīng)用) 問題描述 大學(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ì)劃編制程序。 實(shí)現(xiàn)提示 輸入?yún)?shù)應(yīng)包括:學(xué)期總數(shù),一學(xué)期的學(xué)分上限,每門課的課程號(hào)(可以是固定占 3 位的字母數(shù)字串) 、學(xué)分和直接先修課的課程號(hào)。應(yīng)允許用戶指定下列兩種編排策略之一:一是使學(xué)生在各學(xué)期中的學(xué)習(xí)負(fù)

3、擔(dān)盡量均勻; 二是使課程盡可能地集中在前幾個(gè)學(xué)期中。若根據(jù)給定的條件問題無解, 則報(bào)告適當(dāng)?shù)男畔ⅲ?否則將教學(xué)計(jì)劃輸出到用戶指定的文 件中。計(jì)劃的表格格式可以自己設(shè)計(jì)。可設(shè)學(xué)期總數(shù)不超過 12,課程總數(shù)不超過 100。如果輸入的先修課程號(hào)不在該專業(yè)開設(shè) 的課程序列中,則作為錯(cuò)誤處理。2、功能模塊圖CreateGraph ():構(gòu)造圖InitStack ():構(gòu)造一個(gè)空棧StackEmpty ():判斷是否為空棧Push():入棧Pop():出棧FindInDegree ():求頂點(diǎn)的入度TopologicalSort ():輸出 G 頂點(diǎn)的拓?fù)渑判蚪Y(jié)果3、流程圖 (具體流程圖見詳細(xì)設(shè)計(jì)偽碼流程

4、)4、目標(biāo)測(cè)試 正確測(cè)試:錯(cuò)誤測(cè)試:二、詳細(xì)設(shè)計(jì)1、運(yùn)行環(huán)境:(1) WINDOWS 系7 統(tǒng)( 2) C-Free 5.02、開發(fā)工具:C 語(yǔ)言3、涉及知識(shí)點(diǎn):(1) 棧。用到有關(guān)棧的操作有初始化棧、判斷棧是否為空、入棧和出棧。其中棧主要用來存 放入度為零的頂點(diǎn),即當(dāng)前無先修關(guān)系可以編排的課程。(2) 圖。用到有關(guān)圖的操作有創(chuàng)建圖、統(tǒng)計(jì)圖中各頂點(diǎn)的入度。利用鄰接表作為有向圖的存 儲(chǔ)結(jié)構(gòu),且在頭結(jié)點(diǎn)中增加一個(gè)存放頂點(diǎn)入度的數(shù)組( indegree )。入度為零的頂點(diǎn)即為沒 有前驅(qū)的頂點(diǎn),刪除頂點(diǎn)及以它為尾的弧的操作,則可換以弧頭頂點(diǎn)入度減一來實(shí)現(xiàn)。(3) 拓?fù)渑判颉? a)在有向圖中選一個(gè)沒有

5、前驅(qū)的頂點(diǎn)且輸出之。( b)從圖中刪除該頂點(diǎn)和所有以它為尾的弧。重復(fù)上述兩步, 直至全部頂點(diǎn)均已輸出, 或者當(dāng)前圖中不存在無前驅(qū)的頂點(diǎn)為止, 后 種情況則說明有向圖中存在環(huán)。4、數(shù)據(jù)結(jié)構(gòu)定義及基本操作A. 所用存儲(chǔ)結(jié)構(gòu)及宏定義:#define MAX_VERTEX_NUM 100/ 最大課程總數(shù)#define STACK_INIT_SIZE 100 / 存儲(chǔ)空間的初始分配量#define STACKINCREMENT 10 / 存儲(chǔ)空間的分配增量/ 圖的鄰接表存儲(chǔ)表示typedef struct ArcNodeint adjvex; / 該弧所指向頂點(diǎn)的位置struct ArcNode *ne

6、xtarc; / 指向下一條弧的指針ArcNode;typedef struct VNodechar name24; / 課程名int classid; / 課程號(hào)int credit; / 課程的學(xué)分int indegree; / 該結(jié)點(diǎn)的入度int state; / 該節(jié)點(diǎn)的狀態(tài), 1代表已學(xué), 0代表未學(xué)ArcNode *firstarc; / 指向第一條依附該頂點(diǎn)的弧的指針VNode,AdjListMAX_VERTEX_NUM;typedef structAdjList vertices;/ 頂點(diǎn)向量int vexnum,arcnum;/ 圖的當(dāng)前頂點(diǎn)數(shù)和弧數(shù)ALGraph;typed

7、ef int ElemType;/ 棧的順序存儲(chǔ)表示 typedef struct / ElemType *base;ElemType *top; int stacksize;SqStack;B. 程序中各函數(shù)的簡(jiǎn)要說明:(1) void CreatGraph(ALGraph &G) 構(gòu)建圖。先輸入各頂點(diǎn)(課程)的信息,包括課程名、課程號(hào)、課程學(xué)分。再輸入弧信 息(先修關(guān)系) ,將弧中頂點(diǎn)賦為弧尾,相應(yīng)入度加 1. 最后輸出構(gòu)建好的鄰接表。(2) void InitStack(SqStack &S) int StackEmpty(SqStack &S) void Push(SqStack &S

8、,int e) int Pop(SqStack &S, int *e)構(gòu)造空棧 判斷是否為空棧 入棧 出棧(3) void FindInDegree(ALGraph G,int indegree)求圖中各節(jié)點(diǎn)的入度。 從每個(gè)節(jié)點(diǎn)的第一條依附于該節(jié)點(diǎn)的弧出發(fā), 將該節(jié)點(diǎn)對(duì)應(yīng)的入 度加 1,接著指向下一條弧執(zhí)行同樣的操作,直至指針為空。(3) void TopologicalSort_1(ALGraph G,int numterm, int uplcredit)按課程盡可能集中到前幾個(gè)學(xué)期進(jìn)行編排。當(dāng)每個(gè)學(xué)期的學(xué)分總數(shù)不超過學(xué)分上限時(shí), 在有向圖中選一個(gè)沒有前驅(qū)的頂點(diǎn)(課程)且輸出之。從圖中刪除該

9、頂點(diǎn)(課程)和所有以 它為尾的弧。當(dāng)某學(xué)期的學(xué)分已滿時(shí),進(jìn)入下一學(xué)期的編排。 重復(fù)上述幾步,直至全部頂點(diǎn) (課程)均已輸出,或者當(dāng)前圖中不存在無前驅(qū)的頂點(diǎn)(課程)為止,后一種情況則說明有 向圖中存在環(huán)。(4)void TopologicalSort_2(ALGraph G,int numterm, int uplcredit)按課程盡量均勻分布編排。 當(dāng)每個(gè)學(xué)期的學(xué)分總數(shù)不超過學(xué)分上限且課程數(shù)不超過課程 數(shù)上限時(shí), 在有向圖中選一個(gè)沒有前驅(qū)的頂點(diǎn) (課程)且輸出之。 從圖中刪除該頂點(diǎn) (課程) 和所有以它為尾的弧。 當(dāng)某學(xué)期的學(xué)分已滿或課程數(shù)已滿時(shí), 進(jìn)入下一學(xué)期的編排。 重復(fù)上 述幾步, 直

10、至全部頂點(diǎn) (課程) 均已輸出, 或者當(dāng)前圖中不存在無前驅(qū)的頂點(diǎn) (課程) 為止, 后一種情況則說明有向圖中存在環(huán)。(5)int main()主函數(shù)。 在主函數(shù)中輸出交互界面, 要求用戶輸入各項(xiàng)信息。 調(diào)用 CreateGraph 函數(shù)創(chuàng) 建圖,之后根據(jù)用戶選擇調(diào)用 TopologicalSort_1 或者 TopologicalSort_2 函數(shù)進(jìn)行拓?fù)渑?序并輸出編排結(jié)果,寫入文件中。5、函數(shù)調(diào)用關(guān)系圖2) void FindInDegree(ALGraph G,求圖中各節(jié)點(diǎn)的入度int6、偽碼流程1) void CreatGraph(ALGraph &G)構(gòu)造圖 indegree)(4)

11、void TopologicalSort_1 (ALGraph G,int numterm, int uplcredit)(5)void TopologicalSort_2 (ALGraph G,int numterm, int uplcredit)有向圖 G采用鄰接表存儲(chǔ)結(jié)構(gòu)有向圖 G采用鄰接表存儲(chǔ)結(jié)構(gòu)(6)Main 主函數(shù)三、調(diào)試分析1、調(diào)試過程中遇到的問題與解決方法 我在實(shí)驗(yàn)過程中遇到的最大難題是兩個(gè)課程排序算法的編寫。 剛開始的時(shí)候沒有任何的 思路, 書上、網(wǎng)上也只有拓?fù)渑判虻乃惴ǎ瑢?duì)于課程設(shè)計(jì)要求的排序算法沒有任何頭緒。經(jīng) 過請(qǐng)教老師和同學(xué)以及翻閱了一些相關(guān)書籍, 并在網(wǎng)上的搜索有了

12、排序算法的大體思路。 經(jīng) 過三天的修改,終于寫出了符合要求的排序算法。在設(shè)計(jì)過程中,我的程序有不少漏洞,例如在選擇一次編排后,按任意鍵就會(huì)退出, 不可以繼續(xù)選擇編排策略,經(jīng)過一系列的修改,成功地將程序添加選擇是否繼續(xù)的功能。2、算法的時(shí)空分析對(duì)有 n 個(gè)頂點(diǎn)和 e 條弧的有向圖而言,將建立求各頂點(diǎn)的入度的時(shí)間復(fù)雜度為O(e) ;建立入度定點(diǎn)棧的時(shí)間復(fù)雜度為 O(n) ,在拓?fù)渑判蜻^程中,若有向圖無環(huán),則每個(gè)頂點(diǎn)進(jìn) 一次棧,出一次棧, 入度減 1 的操作在 while 語(yǔ)句中總共執(zhí)行 e 次,所以, 總的時(shí)間復(fù)雜度 為 O(n+e) 。3、改進(jìn)思想A.程序界面有很大的改進(jìn)空間,可設(shè)計(jì)更簡(jiǎn)潔美觀的

13、界面。B.輸入數(shù)據(jù)比較繁瑣, 分步太多, 可編寫程序進(jìn)行改善, 如一步輸入課程名、 課程號(hào)、 學(xué)分。C. 課程號(hào)為 01,02 等形式,也可改為 C1、C2 的形式。4、經(jīng)驗(yàn)體會(huì)在這次課設(shè)中, 我進(jìn)行了大量的資料查閱, 包括上網(wǎng)查詢和求助老師同學(xué), 對(duì)所學(xué)知識(shí) 進(jìn)行復(fù)習(xí)。 通過這些努力,我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程有了新的認(rèn)識(shí), 對(duì)編程的步驟, 有了具體 的體會(huì)。更重要的是,這個(gè)課題完全脫離于只限于書本上的問題, 多用在實(shí)際生活當(dāng)中,讓 我對(duì)計(jì)算機(jī)行業(yè),充滿了信心和自豪。以往我們學(xué)的計(jì)算機(jī)知識(shí)一般停留在理論上,這讓我們不太理解計(jì)算機(jī)的應(yīng)用和前景, 而較少注重我們對(duì)算法的實(shí)踐鍛煉。 而這一次的實(shí)習(xí)既需要

14、我們?nèi)ヂ?lián)系理論, 又需要我們?nèi)?實(shí)踐方法, 很多東西看上去都學(xué)過, 但是和實(shí)際聯(lián)系才知道變通的艱難。 書上得來的并不是 一切, 大多還是需要在其它方面去吸收的, 這是我這次課設(shè)的最大收獲。 這次的實(shí)驗(yàn)讓我們 知道該如何跨過實(shí)際和理論之間的鴻溝。四、用戶手冊(cè)1、 按照提示輸入各個(gè)數(shù)據(jù)(如下圖) :包括:學(xué)期總數(shù),一學(xué)期的學(xué)分上限,編排課程總數(shù),每門課的課程名、課程號(hào)( 固定占 3 位的字母數(shù)字串 ) 、學(xué)分和直接先修課的課程號(hào)課程名課程號(hào)學(xué)分先修關(guān)系程序設(shè)計(jì)基礎(chǔ)012無離散數(shù)學(xué)02301數(shù)據(jù)結(jié)構(gòu)03401,02匯編語(yǔ)言04301語(yǔ)言的設(shè)計(jì)和分析05203,04計(jì)算機(jī)原理06311編譯原理0740

15、5,03操作系統(tǒng)08403,06高等數(shù)學(xué)097無線性代數(shù)10509普通物理11209數(shù)值分析12309,10,01先修順序有向圖:0405020307011208091006112、屏幕上會(huì)顯示您輸入的數(shù)據(jù),確認(rèn)無誤后選擇方案(如下圖)3、選擇方案后會(huì)進(jìn)行計(jì)算并輸出,之后可根據(jù)需要選擇是否繼續(xù)(如下圖)五、測(cè)試結(jié)果1、輸入請(qǐng)攢入學(xué)題總數(shù)汴 謝臥一翠譽(yù)期的學(xué)分=10 請(qǐng)猛入需要編排課程總數(shù):12請(qǐng)輸入課程名:程序設(shè)計(jì)基礎(chǔ)請(qǐng)輸入課程號(hào):01 請(qǐng)輸入該課程的學(xué)分:2 請(qǐng)輸入課程名:離散數(shù)學(xué) 請(qǐng)輸入課程號(hào):02請(qǐng)輸入該課程的學(xué)分:3 請(qǐng)輸入課程名:數(shù)據(jù)結(jié)構(gòu)請(qǐng)輸入課程號(hào):03 請(qǐng)輸入該課程的學(xué)分泊 請(qǐng)輸

16、入課程名:匯編語(yǔ)言請(qǐng)輸入課程號(hào):94請(qǐng)輸入該課程的學(xué)分:3請(qǐng)輸入課程名:語(yǔ)言的設(shè)計(jì)和分析諳輸入課程號(hào):05請(qǐng)輸入該課程的學(xué)分汐請(qǐng)輸入課程名:計(jì)算機(jī)原理 半:Ill請(qǐng)輸入課程號(hào);06I請(qǐng)輸入該課程的學(xué)分:3 請(qǐng)輸入課程名:編譯原理 請(qǐng)輸入課程號(hào) 請(qǐng)輸入該課程的學(xué)分:4 |請(qǐng)輸入課程名:操作系統(tǒng)I請(qǐng)輸入課程號(hào):08請(qǐng)輸入該課程的學(xué)分:4 請(qǐng)輸人課程名:高手敖學(xué) |請(qǐng)輸入課程號(hào):09請(qǐng)輸入該課程的學(xué)分汐 請(qǐng)輸入課程缶線性代數(shù) 請(qǐng)輸入課程號(hào):価請(qǐng)輸入該課程的學(xué)分:5請(qǐng)輸人課程名:昔通物理請(qǐng)輸入課程號(hào):口請(qǐng)輸入該課程的學(xué)分:2潔渝人.課程名嘲值升析請(qǐng)輸入課程號(hào):12請(qǐng)輸入該虞程的學(xué)分:3IH2、輸出策略

17、 1: bianpai1.txt策略 2: bianpai2.txt六、附錄源程序清單及其說明如下:#include stdio.h#include malloc.h#define MAX_VERTEX_NUM 100 / 最大課程總數(shù)#define STACK_INIT_SIZE 100 / 存儲(chǔ)空間的初始分配量 #define STACKINCREMENT 10 / 存儲(chǔ)空間的分配增量 typedef struct ArcNodeint adjvex;/ 該弧所指向頂點(diǎn)的位置struct ArcNode *nextarc;/指向下一條弧的指針ArcNode;typedef struct V

18、Nodechar name24;/ 課程名int classid; /課程號(hào)int credit;/ 課程的學(xué)分int indegree;/該結(jié)點(diǎn)的入度int state;/ 該節(jié)點(diǎn)的狀態(tài), 1 代表已學(xué), 0 代表未學(xué)ArcNode *firstarc; / 指向第一條依附該頂點(diǎn)的弧的指針 VNode,AdjListMAX_VERTEX_NUM;typedef structAdjList vertices;int vexnum,arcnum;ALGraph;typedef int ElemType;typedef structElemType *base;ElemType *top;int

19、stacksize;SqStack;void CreateGraph(ALGraph &G)/ 構(gòu)建圖int i, m, n;ArcNode *p;printf( 請(qǐng)輸入需要編排課程總數(shù) :); scanf(%d,&G.vexnum);for( i=1;i=G.vexnum;i+)printf(n 請(qǐng)輸入課程名 :); scanf(%s,&G.);printf(n 請(qǐng)輸入課程號(hào) :); scanf(%d,&G.verticesi.classid);printf(n 請(qǐng)輸入該課程的學(xué)分 :); scanf(%d,&G.verticesi.credit);G.verti

20、cesi.indegree=0;G.vertices i.state=0;/NOTSTUDYG.verticesi.firstarc=NULL;printf( 請(qǐng)輸入課程先修關(guān)系總數(shù): );scanf(%d,&G.arcnum);):n);printf( 請(qǐng)順序輸入每個(gè)課程先修關(guān)系 ( 先修課程在前并以逗號(hào)作為間隔 for (i = 1; i = G.arcnum; i+)printf(n 請(qǐng)輸入存在先修關(guān)系的兩個(gè)課程的序號(hào) :); scanf(%d,%d,&n,&m);while (nG.vexnum|mG.vexnum)printf( 輸入的頂點(diǎn)序號(hào)不正確請(qǐng)重新輸入 :); scanf(%

21、d,%d,&n,&m);p = (ArcNode*)malloc(sizeof(ArcNode);if (p = NULL)printf(memory allocation failed,goodbey);return;p-adjvex = m; p-nextarc=G.verticesn.firstarc; G.verticesn.firstarc = p;printf(n 建立的鄰接表為 :n);/ 輸出建立好的鄰接表 for(i=1;i,G.verticesi.classid); for(p=G.verticesi.firstarc;p!=NULL;p=p-nextarc)printf(

22、%d-,p-adjvex);printf(NULL); printf(n);void InitStack(SqStack &S)S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int);if (!S.base)printf(ERROR);return;S.top=S.base;S.stacksize=STACK_INIT_SIZE;int StackEmpty(SqStack &S)if(S.top=S.base)return 1;elsereturn 0;void Push(SqStack &S,int e)if(S.top-S.base=S.stac

23、ksize)S.base=(int*)realloc(S.base,(S.stacksize+10)*sizeof(int); if(!S.base)printf(ERROR);return;S.top=S.base+S.stacksize;S.stacksize+=10;*S.top+=e;int Pop(SqStack &S, int *e)if(S.top=S.base)return 1;*e=*-S.top;return 0;void FindInDegree(ALGraph G, int indegree)/求圖中各節(jié)點(diǎn)的入度int i;for (i = 1; i = G.vexnu

24、m; i+)indegreei = 0;for (i = 1; i adjvex+; G.verticesi.firstarc = G.verticesi.firstarc-nextarc;void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)FILE *fp;fp=fopen(bianpai1.txt,w);struct ArcNode *p;SqStack S;int indegreeMAX_VERTEX_NUM;/ 存放各節(jié)點(diǎn)的入度int i,j,k;int count; / 課程編括排數(shù)目計(jì)數(shù)器int sumcredit;

25、/ 每個(gè)學(xué)期的課程學(xué)分累加器FindInDegree(G,indegree);for (i = 1; i = G.vexnum; i+)G.verticesi.indegree=indegreei;InitStack(S);count=0;k=0;while(count!=G.vexnum & k=numterm)sumcredit=0;入度for(i=1;i=G.vexnum;i+) if(G.verticesi.indegree=0)&(G.verticesi.state=0)/ 為零的節(jié)點(diǎn)入棧,即無先修的課程入棧Push(S,i);G.verticesi.state =1;/ 避免入度為

26、零節(jié)點(diǎn)重復(fù)入棧 if(!StackEmpty(S)&(sumcredit=uplcredit)k= k+1;printf(n);printf( 第 %d個(gè)學(xué)期學(xué)得課程有 :,k); sumcredit = 0;for(i=1;i=G.vexnum;i+)入度為零的節(jié)點(diǎn)入棧非空 &學(xué)對(duì)jif(G.verticesi.indegree=0)&(G.verticesi.state=0)/ 棧,即無先修的課程入棧Push(S,i);while(!StackEmpty(S)&(sumcredituplcredit)/ 分總數(shù)小于總學(xué)分上限Pop(S,&j);sumcredit = sumcredit +

27、 G.verticesj.credit; if(sumcredit nextarc)/ 號(hào)頂點(diǎn)每個(gè)鄰接點(diǎn)的入度減一G.verticesp-adjvex.indegree-;else Push(S,j);/將未輸出的節(jié)點(diǎn)重新壓入棧 fprintf(fp,n);printf(n);if(countG.vexnum)printf(n 課程編排出錯(cuò) n);elseprintf(n 課程編排成功 n);fclose(fp);void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)FILE *fp;fp=fopen(bianpai2.txt,w

28、);struct ArcNode *p;SqStack S;int indegreeMAX_VERTEX_NUM;/ 存放各節(jié)點(diǎn)的入度int i,j,k,m,n;int maxnum;int sumnum;int count; / 課程編排數(shù)目計(jì)數(shù)器int sumcredit;/ 每個(gè)學(xué)期的課程學(xué)分累加器 FindInDegree(G,indegree);for (i = 1; i = G.vexnum; i+)G.verticesi.indegree=indegreei;InitStack(S);count=0;k=0;maxnum=G.vexnum/numterm+1;sumnum=0;w

29、hile(count!=G.vexnum & k=numterm) sumcredit=0;for(i=1;i=G.vexnum;i+) if(G.verticesi.indegree=0)&(G.verticesi.state=0)/ 入度 為零的節(jié)點(diǎn)入棧,即無先修的課程入棧Push(S,i);G.verticesi.state =1;/ 避免入度為零節(jié)點(diǎn)重復(fù)入棧 if(!StackEmpty(S)&(sumcredit=uplcredit)k= k+1;printf(n);printf( 第 %d個(gè)學(xué)期學(xué)得課程有 :,k); sumcredit = 0;sumnum=0;for(i=1;i=G.vexnum;i+)/ 入度為零的節(jié)點(diǎn)入棧, 即無先修的課程 入棧if(G.verticesi.indegree=0)&(G.verticesi.state=0)Push(S,i);棧非空 &學(xué)while(!StackEmpty(S)&(sumcredituplcre

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論