单循环比赛算法设计c语言,单循环赛中选手胜负序列求解问题-数据结构与算法课程设计报告.doc...
合肥學(xué)院
計(jì)算機(jī)科學(xué)與技術(shù)系
課程設(shè)計(jì)報(bào)告
2009~2010學(xué)年第二學(xué)期
課程
數(shù)據(jù)結(jié)構(gòu)與算法
課程設(shè)計(jì)名稱
單循環(huán)賽中選手勝負(fù)序列求解問題
學(xué)生姓名
王夢宇
學(xué)號
0804012009
專業(yè)班級
08計(jì)科(2)
指導(dǎo)教師
張貫虹 王昆侖
2010年6月
題目:單循環(huán)賽中選手勝負(fù)序列求解問題
題目內(nèi)容:有n個(gè)選手p1,p2,p3,…,pn參加了的單循環(huán)賽,每對選手之間非勝即負(fù)。現(xiàn)在要求求出一個(gè)選手序列p1’,p2’,p3’,…,pn’,使其滿足pi’勝pi+1’(i=1,…,n-1)。
1、問題分析和任務(wù)定義
單循環(huán)賽的定義:
單循環(huán)賽,是所有參加比賽的隊(duì)兩兩進(jìn)行比賽并且每兩隊(duì)均能相遇一次,最后按各隊(duì)在全部比賽中的積分、得失分率排列名次。如果參賽球隊(duì)不多,而且時(shí)間和場地都有保證,通常都采用這種競賽方法。
單循環(huán)比賽輪次的計(jì)算:
本題有兩種不同的理解,第一個(gè)是按比賽的積分排名產(chǎn)生勝負(fù)序列,第二個(gè)是按比賽過程中各個(gè)選手間的勝負(fù)關(guān)系產(chǎn)生勝負(fù)序列,具體分析如下:
(1)按比賽中積分排名產(chǎn)生勝負(fù)序列:
比賽可規(guī)定各個(gè)選手之間均遭遇且只遭遇一次,比賽時(shí)勝方得1分,負(fù)方得-1分,在比賽結(jié)束時(shí)按積分排序進(jìn)行排名,由此產(chǎn)生勝負(fù)序列關(guān)系。
(2)按比賽過程中各個(gè)選手間的勝負(fù)關(guān)系產(chǎn)生勝負(fù)序列:
該種方法是以過程中的勝負(fù)為標(biāo)準(zhǔn)從而產(chǎn)生勝負(fù)序列,當(dāng)然,這種勝負(fù)序列很大的可能性是不唯一的,本程序按課程設(shè)計(jì)任務(wù)書的要求,僅求出其中的一個(gè)勝負(fù)序列關(guān)系,即是在有向圖中求解出一條包含所有頂點(diǎn)的簡單路徑的問題。
2、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計(jì)
(1)對于第一種情況,本實(shí)驗(yàn)選用的數(shù)據(jù)結(jié)構(gòu)是結(jié)構(gòu)體。結(jié)構(gòu)體中包含選手的名字,編號和勝負(fù)所得的積分。勝負(fù)序列的求解轉(zhuǎn)化為了對所有選手的積分的排序問題。然后根據(jù)積分的多少從大到小輸出選手的名次、選手姓名、選手編號信息。其概要設(shè)計(jì)如下:
定義了一個(gè)都文件Score.h.主要包含了以下幾個(gè)功能:
1
1
★★★★歡迎進(jìn)入積分處理比賽結(jié)果菜單★★★★
1 輸入比賽選手的信息
2 輸出比賽選手的比賽名次
3 根據(jù)選手編號查詢選手的比賽名次及得分
4 根據(jù)選手姓名查詢選手的比賽名次及得分
0 結(jié)束本菜單操作
*****注:第一次使用本系統(tǒng)時(shí)請選擇1號功能*****
判斷
0
3
2
1
4
使用子函數(shù)Creat()用于輸入選手信息
使用子函數(shù)Order()用來根據(jù)積分對選手進(jìn)行排名
使用子函數(shù)Search_num(int num)根據(jù)編號查詢選手信息
使用子函數(shù)Search_name(string name)根據(jù)姓名查詢選手信息
跳出循環(huán)
圖1 Score函數(shù)的主框架
(2)對于第二種情況,本實(shí)驗(yàn)采用的數(shù)據(jù)結(jié)構(gòu)是有向圖,每個(gè)選手視為一個(gè)頂點(diǎn),每條邊視為選手之間的勝負(fù)關(guān)系,箭頭指向的一方為失敗方。所以勝負(fù)序列的求解就轉(zhuǎn)化為了圖的深度遍歷問題(實(shí)際上跟有向圖的深度遍歷不太一樣,詳情請看源代碼附錄)。另外為了便于深度遍歷有向圖,本實(shí)驗(yàn)采用的存儲結(jié)構(gòu)為圖的鄰接矩陣存儲。
主要框架如下:
Win_Fail.h
Win_Fail.h的功能
子函數(shù)Graph *Creat_Graph(int n)用于創(chuàng)建圖
子函數(shù)Print_Graph(Graph *g,int n)用于輸出矩陣
void Push(int num)用于頂點(diǎn)進(jìn)棧
子函數(shù)Pop(int num)用于出棧
子函數(shù)intTest(Graph *g,int i,int n)用于測試
子函數(shù)voidSearch(Graph *g,int i,int n)用于深度搜索
初始化函數(shù)Init()
圖2 Win_Fail.h的主框架
(3)主函數(shù)的主要框架
主菜單
主菜單
歡迎使用單循環(huán)賽中選手勝負(fù)序列求解問題程序"
本程序有以下三個(gè)功能:
1:以單循環(huán)賽中的積分排名為標(biāo)準(zhǔn)
2:以單循環(huán)賽過程中的勝負(fù)為標(biāo)準(zhǔn)
0:結(jié)束操作
Case 1:子函數(shù)Score()用于根據(jù)積分求解選手序列
Case2:子函數(shù)Process()用于根據(jù)選手之間的勝負(fù)關(guān)系求解
Case3:跳出主菜單,即程序運(yùn)行結(jié)束
判斷
圖3 主函數(shù)功能框架
3、詳細(xì)設(shè)計(jì)和編碼
(1)、對于第一種情況:根據(jù)積分求解的詳細(xì)設(shè)計(jì)及編碼
1、定義如下數(shù)據(jù)結(jié)構(gòu)的選手類型
typedef struct{ //結(jié)構(gòu)體
string name; //選手的姓名
int num; //選手的編號
int score; //選手所得分?jǐn)?shù)
} player;
2、全局變量的定義
player pl[max];定義全局變量,其中max為
總結(jié)
以上是生活随笔為你收集整理的单循环比赛算法设计c语言,单循环赛中选手胜负序列求解问题-数据结构与算法课程设计报告.doc...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel高级筛选怎么用_Excel表格
- 下一篇: n维椭球体积公式_【“数”你好看】点到直