大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 馬踏棋盤(pán)
《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 馬踏棋盤(pán)》由會(huì)員分享,可在線閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 馬踏棋盤(pán)(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、word 前言 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是解決實(shí)際的應(yīng)用問(wèn)題,特別是非數(shù)值計(jì)算類(lèi)型的應(yīng)用問(wèn)題,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)就是為此目的一次實(shí)際訓(xùn)練。要求我們?cè)趯?duì)題目進(jìn)展獨(dú)立分析的根底上,完成設(shè)計(jì)和開(kāi)發(fā),并最終承受?chē)?yán)格的測(cè)試考核。以深化對(duì)數(shù)據(jù)結(jié)構(gòu)課程中根本概念、理論和方法的理解,提升綜合運(yùn)用所學(xué)知識(shí)處理實(shí)際問(wèn)題的能力,使我們的的程序設(shè)計(jì)能力與調(diào)試水平有一個(gè)明顯的提升。 課程設(shè)計(jì)所安排的題目,都有一定的難度和深度,從抽象數(shù)據(jù)類(lèi)型的提煉、數(shù)據(jù)結(jié)構(gòu)選擇到算法的設(shè)計(jì),均由我們每個(gè)人自主完成。在一周的時(shí)間,歷經(jīng)查找參考資料、使用技術(shù)手冊(cè)、設(shè)計(jì)編碼和撰寫(xiě)文檔的實(shí)踐,進(jìn)一步升華對(duì)軟件工程師和程序員人格素質(zhì)的認(rèn)識(shí)和理解
2、。 本課程設(shè)計(jì)的主要設(shè)計(jì)容是: 設(shè)計(jì)一個(gè)馬踏棋盤(pán)問(wèn)題的演示程序。 即將馬隨機(jī)地放在國(guó)際象棋的8*8棋盤(pán)的某個(gè)方格中,然后令馬按走棋規(guī)如此開(kāi)始進(jìn)展移動(dòng)。要求馬將棋盤(pán)上的每個(gè)方格進(jìn)入且只進(jìn)入一次,走遍全部64個(gè)方格。要求編制非遞歸程序,求出馬的行走路線,將數(shù)字1,2,…,64依次填入一個(gè)8*8的方陣在屏幕上顯示輸出。 針對(duì)該問(wèn)題本課程設(shè)計(jì)采用的是面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言Java,在Windows7, myeclipse8.5.0的平臺(tái)上開(kāi)發(fā)出來(lái),并有圖形界面。最終較好的實(shí)現(xiàn)了全部要求,達(dá)到了預(yù)期效果
3、。從中我也學(xué)到了很多,不僅僅是課堂外的新知識(shí),還有那種會(huì)查資料,會(huì)學(xué)習(xí)新知識(shí)的能力。 這個(gè)課程設(shè)計(jì)的順利完成,離不開(kāi)胡教師的指導(dǎo)和幫助,在他的細(xì)心指導(dǎo)和幫助下,我對(duì)馬踏棋盤(pán)程序開(kāi)發(fā)的整個(gè)流程有了深刻地了解和系統(tǒng)地掌握,在這里學(xué)生表示真誠(chéng)地感。另外也這次課程設(shè)計(jì)提供應(yīng)我?guī)椭耐瑢W(xué)們。此外,本課程設(shè)計(jì)還參考了一些文獻(xiàn)資料,在此向這些文獻(xiàn)資料的作者深表意。 本課程設(shè)計(jì)可作為數(shù)據(jù)結(jié)構(gòu)和Java課程教學(xué)的參考案例。 由于時(shí)間倉(cāng)促和本人水平所限,設(shè)計(jì)中難免有不當(dāng)和欠妥之處,敬請(qǐng)教師不吝批評(píng)指正。
4、 筆者 目錄 摘要………………………………………………………………………………………………………………………………………3 第一章 需求分析………………………………………………………………………………………………………………….4 第二章 概要設(shè)計(jì)………………………………………………………………………………………………………………….5 2.1系統(tǒng)描述。。。。………………………………………………………………….5 …………………………………………………………………………..5 馬踏棋盤(pán)流程…………………
5、………………………………5 算法設(shè)計(jì) 第三章 詳細(xì)設(shè)計(jì) 3.1 Jisuan類(lèi)實(shí)現(xiàn) Disizhang 4,2 Diwu Cankaowenxian Fulu 摘要 本課程設(shè)計(jì)中的程序?qū)崿F(xiàn)了馬踏棋盤(pán)問(wèn)題的求解,并能夠演示起始位置在棋盤(pán)上任何位置的問(wèn)題的實(shí)現(xiàn).程序采用圖形演示,使算法的描述更形象,更生動(dòng),使教學(xué)更能產(chǎn)生良好的效果。對(duì)于該程序,我嚴(yán)格按照面向?qū)ο蟮乃枷脒M(jìn)展開(kāi)發(fā),其中有Jisuan類(lèi), Shuchu類(lèi), Jframe類(lèi)和Main四個(gè)類(lèi)。其中Jisuan類(lèi)主要是初始化各點(diǎn)的可走路徑,并且刪除不合法的點(diǎn);Shuc
6、hu類(lèi)主要最優(yōu)算法的實(shí)現(xiàn);Jframe類(lèi)為圖形用戶界面的設(shè)計(jì),主要完成棋盤(pán)的繪制和結(jié)果的打??;Main類(lèi)主要是負(fù)責(zé)整個(gè)程序的控制。最終調(diào)試運(yùn)行通過(guò),實(shí)現(xiàn)了全部要求,取得了理想效果。 關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤(pán) Java 圖形界面 Abstract This course design of the program realization horses on board the solution, and to demonstrate the starting position on the board of the realization of the probl
7、em any position. The program using graphical presentation, the method of more image, the more vivid description, and make the teaching more can produce good effect. For the program, I in strict accordance with the object-oriented ideas of development, including Jisuan class, Shuchu class, Jframe cla
8、sses and Main four classes. Among them Jisuan kind basically is the initial points of walk path, and remove not legal point; Shuchu main kinds of the realization of the optimal algorithm; Jframe class for the graphical user interface design, the main finish drawing the board and results of the print
9、; Main kinds of major is responsible for the entire process control. Final test and operation, realize the requirements through all, make the ideal effect. Key words: data structure horse on board Java graphical interface 第一章 需求分析 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生必做的集中實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完《數(shù)
10、據(jù)結(jié)構(gòu)》課程后進(jìn)展的一次全面的綜合練習(xí)。其目的在于通過(guò)課程設(shè)計(jì),使學(xué)生能夠得到較系統(tǒng)的技能訓(xùn)練,從而鞏固和加深對(duì)數(shù)據(jù)結(jié)構(gòu)的根底理論知識(shí)的理解,培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)理論知識(shí)解決實(shí)際問(wèn)題的能力,使學(xué)生成為具有扎實(shí)的計(jì)算機(jī)理論根底和較強(qiáng)的獨(dú)立動(dòng)手能力的復(fù)合型、應(yīng)用型人才。 馬踏棋盤(pán)問(wèn)題是一個(gè)古老而著名的問(wèn)題,它最初是由大數(shù)學(xué)家Euler提出的. 問(wèn)題是這樣的:國(guó)際象棋中的棋子(叫作馬)在一個(gè)空棋盤(pán)移動(dòng),問(wèn)它能否經(jīng)過(guò)64格中的每一格且只經(jīng)過(guò)一次?(馬按L行移動(dòng),即在某方向前進(jìn)兩格接著在與原方向垂直的方向上前進(jìn)一格) 本程序?qū)崿F(xiàn)了馬踏棋盤(pán)問(wèn)題的求解,并能夠演示起始位置在棋盤(pán)上任何位置的問(wèn)題的實(shí)現(xiàn).
11、程序采用圖形演示,使算法的描述更形象,更生動(dòng),使教學(xué)更能產(chǎn)生良好的效果。 第二章 概要設(shè)計(jì) 本程序采用myeclipse8.5.0來(lái)編制整個(gè)程序,這樣既可以使大家對(duì)算法的實(shí)現(xiàn)有了一定的了解,也可以熟悉一下Java圖形界面以與Java語(yǔ)言的命名規(guī)。作為數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),本人希望同時(shí)也能讓大家順便熟悉一下Java的根本語(yǔ)言結(jié)構(gòu)和強(qiáng)大的開(kāi)發(fā)能力。 在馬踏棋盤(pán)的課程設(shè)計(jì)中,我們嚴(yán)格按照面向?qū)ο蟮乃枷脒M(jìn)展開(kāi)發(fā),其中有Jisuan類(lèi), Shuchu類(lèi), Jframe類(lèi)和Main類(lèi)。讀者應(yīng)注意各個(gè)類(lèi)之
12、間的關(guān)系,以便也能順道理解Java中類(lèi)的思想。 。 馬踏棋盤(pán)流程 將馬隨機(jī)地放在國(guó)際象棋的8*8棋盤(pán)Board[8][8]的某個(gè)方格中,然后令馬按走棋規(guī)如此開(kāi)始進(jìn)展移動(dòng)。要求馬將棋盤(pán)上的每個(gè)方格進(jìn)入且只進(jìn)入一次,走遍全部64個(gè)方格。 算法設(shè)計(jì) 設(shè)計(jì)思想 ① 利用某種算法直接找到最優(yōu)解,算出最優(yōu)路徑,而不是一步步嘗試遇到錯(cuò)誤回溯。 ②設(shè)一數(shù)組與棋盤(pán)坐標(biāo)一一對(duì)應(yīng)〔1,1〕到〔8,8〕,存放每個(gè)棋盤(pán)格上應(yīng)算出的路徑數(shù)字。 ③ 路徑從1~64存放到與棋盤(pán)數(shù)組中對(duì)應(yīng)的數(shù)組中,將數(shù)組當(dāng)形參傳到圖形用戶界面,利用Graphics繪制棋盤(pán)并打印數(shù)組。 ④ 建立主函數(shù),調(diào)用計(jì)
13、算路徑類(lèi)和繪制棋盤(pán)類(lèi)。 程序的運(yùn)行關(guān)系如圖2-1. 圖2-1 程序運(yùn)行關(guān)系圖 2.4.3算法結(jié)構(gòu)設(shè)計(jì) ①最優(yōu)算法設(shè)計(jì) 準(zhǔn)備階段: (a) 按國(guó)際象棋馬的走法,最多有8種可能,創(chuàng)建數(shù)組int path[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}}存放8中可能,為了滿足與棋盤(pán)一一對(duì)應(yīng)故用3×8數(shù)組。 (b) 創(chuàng)建數(shù)組int [][]way=new int[9][9]存放棋盤(pán)每點(diǎn)可走
14、的路徑數(shù)。 (c) 創(chuàng)建數(shù)組int [][]output=new int[9][9]存放最終繪制棋盤(pán)格中輸出的數(shù)字,即行走路線。 (d) 計(jì)算出棋盤(pán)上每點(diǎn)的可走路徑數(shù),存入way數(shù)組,超出棋盤(pán)邊界的點(diǎn)被舍棄,讓數(shù)組與棋盤(pán)一一對(duì)應(yīng)。 計(jì)算階段: (a) 從用戶輸入起始點(diǎn)坐標(biāo),存入m,n。 (b) 先假設(shè)每個(gè)點(diǎn)最小可走路徑數(shù)為min=8。 (c) 根據(jù)way數(shù)組中已經(jīng)存放的值與假設(shè)的最小可走路徑數(shù)為8比擬,假如小于8如此存入min,如此循環(huán)最多8次,找出使min值最小的點(diǎn),設(shè)為下次要走的點(diǎn),依次類(lèi)推,直至找出64個(gè)點(diǎn),即最優(yōu)路徑。 ②用戶輸入
15、 利用java提供的Scanner函數(shù)從操作臺(tái)進(jìn)展輸入。 ③圖形用戶界面 利用Jframe窗體建立圖形用戶界面,編寫(xiě)構(gòu)造函數(shù),用Graphics()函數(shù)繪制矩形并填充顏色,畫(huà)出棋盤(pán)表格,并利用drawString()在相應(yīng)的棋盤(pán)坐標(biāo)中打印出output數(shù)組中數(shù)字。 第三章 詳細(xì)設(shè)計(jì) 3.1 Jisuan類(lèi)實(shí)現(xiàn) public class jisuan { //計(jì)算棋盤(pán)中各點(diǎn)可走路徑 public void init(int[][]
16、way){ int i,j,k,x,y; intpath[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}}; //存放馬的行走規(guī)如此,為了使坐標(biāo)和棋盤(pán)一一對(duì)應(yīng),定義8×3數(shù)組 for(i=1;i<=8;i++) //先初始各點(diǎn)可走路徑為零 for(j=1;j<=8;j++)
17、 way[i][j]=0; for(i=1;i<=8;i++) //計(jì)算各點(diǎn)可走路徑,如果合法便存儲(chǔ) for(j=1;j<=8;j++) for(k=1;k<=8;k++) { x=i;y=j; x=x+path[k][1]; y=y+path[k][2]; //x,y代表走下一步后的坐標(biāo),通過(guò)k的增長(zhǎng),改變行走的方向
18、 if(x>=1&&x<=8&&y>=1&&y<=8) //判斷是否落在棋盤(pán),否如此不存儲(chǔ) way[i][j]++ ; } }//init }//jisuan 注釋: 此類(lèi)主要初始化各點(diǎn)的可走路徑,并且刪除不合法的點(diǎn)。 首先初始化way數(shù)組為0,然后利用for循環(huán)嵌套實(shí)現(xiàn)64次運(yùn)算,每次再嵌套一個(gè)執(zhí)行8次的循環(huán),利用k++實(shí)現(xiàn)改變行走路線,前提是path數(shù)組中已經(jīng)存儲(chǔ)了馬的行走規(guī)如此,根據(jù)每次到達(dá)的點(diǎn)判斷是否落在棋盤(pán),假如合法如此相應(yīng)坐標(biāo)格的way數(shù)組自加1,以此來(lái)計(jì)算出棋盤(pán)中各點(diǎn)
19、的可走路線數(shù),完成最優(yōu)算法的準(zhǔn)備階段。 3.2 Shuchu類(lèi)算法實(shí)現(xiàn) public class shuchu { public void calcu(int[][]output,int[][]way){ int z,x,y,m,n,k,min; int i=0;int j=0; int path[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}}; System.out.println("請(qǐng)輸入馬的起始位置坐標(biāo):x y(其中x,y均為正整數(shù),0<
20、x<9,0
21、 //初始可選路徑最小值為8 output[m][n]=z; //用output[][]來(lái)記錄所走路徑 way[m][n]=0; //走過(guò)的點(diǎn)可選路徑設(shè)為0,沒(méi)走過(guò)設(shè)為可選路徑數(shù) for(k=1;k<=8;k++) //走最小可選路徑數(shù)的點(diǎn) { x=m+path[k][1]; y=n+path[k][2]; //x,y代表走下一步后的坐
22、標(biāo),通過(guò)k的增長(zhǎng),改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8)
if(way[x][y]!=0) //沒(méi)走過(guò)的點(diǎn)
{
--way[x][y]; //可選路徑數(shù)減1,因?yàn)楸军c(diǎn)剛走過(guò)
if(way[x][y] 23、 //使a[x][y]存放最小可選路徑數(shù)的點(diǎn)
i=x;
j=y;}
}
}//for
m=i;n=j; //下一個(gè)點(diǎn)的坐標(biāo)
} //for“64次〞
}//判斷合法
else
System.out.println("錯(cuò)誤:坐標(biāo)超出棋盤(pán)邊界!");
}//calu
}//shuchu
注釋:
此類(lèi)為 24、主要最優(yōu)算法的實(shí)現(xiàn)類(lèi)。
首先依然定義馬的行走路線,和一些循環(huán)中用到的變量。然后利用Scanner函數(shù)進(jìn)展用戶輸入。橫縱坐標(biāo)存入m和n。
判斷起始坐標(biāo)是否合法,合法如此用一個(gè)64次的循環(huán)分別寫(xiě)入output數(shù)組中馬的行走路線,假設(shè)min的值為8。
用一個(gè)8次循環(huán)分別列出馬的可走路徑,假如合法且是沒(méi)走過(guò)的點(diǎn)將對(duì)應(yīng)的way數(shù)組減1,因?yàn)橄麓渭偃缱叩酱它c(diǎn),可選路徑數(shù)必然要減1,不可走已經(jīng)走過(guò)的點(diǎn)。如果該點(diǎn)的可走路徑數(shù) 25、
以此類(lèi)推馬的整個(gè)行走路線就完成了,且已經(jīng)將1~64分別寫(xiě)入到output數(shù)組中.
import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Font;
publicclassJframeextends JFrame{
int [][]seed=newint[9][9];
public Jframe(){ //窗體構(gòu)造函數(shù)
this.setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_ 26、CLOSE);
setVisible(true);
}
publicvoid paint(Graphics g){ //創(chuàng)建Graphics畫(huà)圖
super.paint(g);
g.setColor(Color.black);
g.drawRect(50,50,400,400); //畫(huà)棋盤(pán)邊界
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j, 100*i-50, 50, 50); //畫(huà)棋盤(pán)黑格1
for(int i=1;i<=4;i++)
for(int j=1;j< 27、=4;j++)
g.fillRect(100*j-50, 100*i, 50, 50); //畫(huà)棋盤(pán)黑格2
g.setColor(Color.blue);
Font num=new Font("楷體",Font.BOLD,25);
g.setFont(num); //設(shè)置字體
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
g.drawString(seed[i][j]+"", 50*j+15,50*i+35); //打印棋盤(pán)格中數(shù)字
}
publicvoid write(int output[] 28、[]){ //將結(jié)果數(shù)組引入Jframe類(lèi),并賦給數(shù)組seed
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
seed[i][j]=output[i][j];
}
} //Jframe
注釋:
此類(lèi)為圖形用戶界面,主要完成棋盤(pán)的繪制和結(jié)果的打印.
創(chuàng)建構(gòu)造函數(shù),設(shè)置窗體大小,使窗體可見(jiàn).
創(chuàng)建Graphics()畫(huà)圖函數(shù),設(shè)置背景顏色為黑色,繪制棋盤(pán)邊框.因?yàn)閲?guó)際象棋棋盤(pán)為黑白交替方格,所以將黑色局部用Rectfill()函數(shù)畫(huà)出,就形成了棋盤(pán),利用for循環(huán)將黑色方格分兩次畫(huà)完,設(shè)計(jì)的棋盤(pán)坐標(biāo)如下:
29、(50,50) (400,50)
(50,400) (400,400)
圖3-1 棋盤(pán)的設(shè)計(jì)
每個(gè)格子的長(zhǎng)寬是50,50。
左斜線是第一次畫(huà)的黑格,右斜線是第二次畫(huà)的黑格.
publicclass Main {
publicstaticvoid main(String[] args) {
int i,j;
30、
int [][]way=newint[9][9]; //初始化可算路徑數(shù)數(shù)組
int [][]output=newint[9][9]; //初始化結(jié)果輸出數(shù)組
jisuan ad=new jisuan();
ad.init(way); //運(yùn)行計(jì)算類(lèi)
shuchu aw=new shuchu();
aw.calcu(output, way); //運(yùn)行輸出類(lèi)
System.out.printf("運(yùn)行結(jié)果如下(稍后會(huì)以棋盤(pán)界面顯示,為便于看圖,相鄰兩步之間棋盤(pán)顏色不同):\n");
for(i=1;i<=8;i++){ //輸出
for(j= 31、1;j<=8;j++)
System.out.printf("%6d",output[i][j]);
System.out.printf("\n");
}
Jframe w=new Jframe(); //圖形用戶輸出
w.write(output); //載入結(jié)果輸出數(shù)組
} //main
} //Main
注釋:
創(chuàng)建way和output數(shù)組.
調(diào)用類(lèi)并創(chuàng)建對(duì)象,對(duì)象調(diào)用函數(shù).
在控制臺(tái)同樣輸出一份結(jié)果,和圖形用戶界面的一樣.
創(chuàng)建窗體,并傳入output數(shù)組參數(shù)
流程圖如下:
圖3-2 Main類(lèi)流程圖 32、
程序的源代碼參見(jiàn)附錄。
第四章 調(diào)試分析
這次課程設(shè)計(jì)我遇到如下問(wèn)題,最終通過(guò)調(diào)試分析都得到了很好的解決。
4.1最優(yōu)算法的求解,無(wú)從下手,最后借鑒前輩的思路想到了走最小度數(shù)點(diǎn)的算法。
4.2 從shuchu類(lèi)計(jì)算的結(jié)果無(wú)法傳入Jframe函數(shù),曾試過(guò)全局變量,但是分裝性不好,最后把結(jié)果數(shù)組當(dāng)作形式參數(shù)傳入Jframe類(lèi)的一個(gè)write〔〕函數(shù)。
4.3無(wú)法在棋盤(pán)的格子上打印數(shù)字,因?yàn)閐rawstring〔〕函數(shù)只能打印字符型變量,而我的output是整形變量,最后利用drawstring〔output+“〞,50,50〕一個(gè)小技巧將int型轉(zhuǎn)化為str 33、ing型。
4.4剛開(kāi)始棋盤(pán)畫(huà)得很麻煩,所以后期直接用填充色矩形畫(huà)出黑的,其余的就成了白的,并分兩步話出棋盤(pán),感覺(jué)比擬簡(jiǎn)單。
4.5開(kāi)始無(wú)法使數(shù)組與棋盤(pán)坐標(biāo)一一對(duì)應(yīng)。
程序運(yùn)行截屏見(jiàn)附錄B。
第五章 總結(jié)
5.11最優(yōu)算法的求解,無(wú)從下手,最后借鑒前輩的思路想到了走最小度數(shù)點(diǎn)的算法。
5.12 從shuchu類(lèi)計(jì)算的結(jié)果無(wú)法傳入Jframe函數(shù),曾試過(guò)全局變量,但是分裝性不好,最后把結(jié)果數(shù)組當(dāng)作形式參數(shù)傳入Jframe類(lèi)的一個(gè)write〔〕函數(shù)。
5.13無(wú)法在棋盤(pán)的格子上打印數(shù) 34、字,因?yàn)閐rawstring〔〕函數(shù)只能打印字符型變量,而我的output是整形變量,最后利用drawstring〔output+“〞,50,50〕一個(gè)小技巧將int型轉(zhuǎn)化為string型。
5.14剛開(kāi)始棋盤(pán)畫(huà)得很麻煩,所以后期直接用填充色矩形畫(huà)出黑的,其余的就成了白的,并分兩步話出棋盤(pán),感覺(jué)比擬簡(jiǎn)單。
5.15開(kāi)始無(wú)法使數(shù)組與棋盤(pán)坐標(biāo)一一對(duì)應(yīng)。
5.2收獲與體會(huì)
總體感覺(jué)這個(gè)課題還是比擬簡(jiǎn)單的,不找出問(wèn)題的根本,就無(wú)法理解自己獲得的是什么,在一個(gè)星期的課程設(shè)計(jì)中,我將掌握的專業(yè)理論知識(shí)很好地運(yùn)用到對(duì)這個(gè)課題的理解中.做到了理論和實(shí)踐相結(jié)合,在實(shí)踐中加深了對(duì)專業(yè)理論知識(shí)的理解,并 35、提升了對(duì)理論知識(shí)的運(yùn)用能力,獲得了許多寶貴的經(jīng)驗(yàn)。
5.21 鞏固和加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能力。
5.22 培養(yǎng)了我選用參考書(shū),查閱手冊(cè)與文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考,深入研究,分析問(wèn)題、解決問(wèn)題的能力。
5.23 過(guò)實(shí)際編譯系統(tǒng)的分析設(shè)計(jì)、編程調(diào)試,掌握應(yīng)用軟件的分析方法和工程設(shè)計(jì)方法。
5.24 能夠按要求編寫(xiě)課程設(shè)計(jì)報(bào)告書(shū),能正確闡述設(shè)計(jì)和實(shí)驗(yàn)結(jié)果,正確繪制系統(tǒng)和程序框圖。
5.25 通過(guò)這次課程設(shè)計(jì),培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐步建立正確的生產(chǎn)觀念、經(jīng)濟(jì)觀念和全局觀念。
由于時(shí)間緊迫,我做的這個(gè)課程設(shè)計(jì)可能還不十分完善,但重要的是,這次課程設(shè) 36、計(jì)讓我學(xué)到了很多知識(shí)。通過(guò)這次課程設(shè)計(jì),我對(duì)數(shù)據(jù)結(jié)構(gòu)課程有了進(jìn)一步的了解和認(rèn)識(shí),對(duì)數(shù)據(jù)結(jié)構(gòu)的理解上升到一個(gè)新的高度,也充分地了解到一個(gè)好的算法對(duì)于程序的重要性。
最后再次感這次課程設(shè)計(jì)提供應(yīng)我?guī)椭慕處?,同學(xué)們以與參考文獻(xiàn)
的作者們,你們!
參考文獻(xiàn)
【1】 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)〔c語(yǔ)言版〕.:清華大學(xué),2007
【2】Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,,Clifford Stein.
Introduction to Algorithms, Second Edition. : 高等教育, 2002
37、
【3】【美】s巴斯.計(jì)算機(jī)算法:設(shè)計(jì)與分析引論.朱洪等譯.:復(fù)旦大學(xué),1985
[4] Ralph Morelli. Java面向?qū)ο蟪绦蛟O(shè)計(jì)〔第三版〕.:清華大學(xué), 2008
【5】亦輝,華,胡潔.Java面向?qū)ο蟪绦蛟O(shè)計(jì).:人民郵電,2008
附錄A 源代碼
-----------------------class jisuan-----------------------
publicclass jisuan{ //計(jì)算棋盤(pán)中各點(diǎn)可走路徑
public 38、void init(int[][]way){
int i,j,k,x,y;
int path[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};//存放馬的行走規(guī)如此,為了使坐標(biāo)和棋盤(pán)一一對(duì)應(yīng)定義8*3數(shù)組
for(i=1;i<=8;i++) //先初始各點(diǎn)可走路徑為零
for(j=1;j<=8;j++)
way[i][j]=0;
for(i=1;i<=8;i++) //計(jì)算各點(diǎn)可走路徑,如果合法便存儲(chǔ)
for(j=1;j<=8;j++)
f 39、or(k=1;k<=8;k++){
x=i;y=j;
x=x+path[k][1];
y=y+path[k][2]; //x,y代表走下一步后的坐標(biāo),通過(guò)k的增長(zhǎng),改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8) //判斷是否落在棋盤(pán),否如此不存儲(chǔ)
way[i][j]++;
}
} //init
} //jisuan
--------------------------class shuchu--------------------
import java.util.Scanne 40、r;
publicclass shuchu {
publicvoid calcu(int[][]output,int[][]way){
int z,x,y,m,n,k,min;
int i=0;int j=0;
int path[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};
System.out.println("請(qǐng)輸入馬的起始位置坐標(biāo):x y(其中x,y均為正整數(shù),0 41、 scan=new Scanner(System.in); //從鍵盤(pán)輸入起始點(diǎn)坐標(biāo)
m=scan.nextInt();
n=scan.nextInt();
if(m>=1&&m<=8&&n>=1&&n<=8){ //判斷輸入位置是否合法
for(z=1;z<=64;z++){ //分64次寫(xiě)入
min = 8; //初始可選路徑最小值為8
output[m][n]=z; //用output[][]來(lái)記錄所走路徑
way[m][n]=0; //走過(guò)的點(diǎn)可選路徑設(shè)為0,沒(méi)走過(guò)設(shè)為可選路徑數(shù)
for(k=1;k<=8;k++){ //走最小可選路 42、徑數(shù)的點(diǎn)
x=m+path[k][1];
y=n+path[k][2]; //x,y代表走下一步后的坐標(biāo),通過(guò)k的增長(zhǎng),改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8)
if(way[x][y]!=0){ //沒(méi)走過(guò)的點(diǎn)
--way[x][y]; //可選路徑數(shù)減1,因?yàn)楸军c(diǎn)剛走過(guò)
if(way[x][y] 43、 }
} //for
m=i;n=j; //下一個(gè)點(diǎn)的坐標(biāo)
} //for“64次〞
} //判斷合法
else
System.out.println("錯(cuò)誤:坐標(biāo)超出棋盤(pán)邊界!");
} //calu
} //shuchu
--------------------------classJframe--------------------
import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.F 44、ont;
publicclassJframeextends JFrame{
int [][]seed=newint[9][9];
public Jframe(){ //窗體構(gòu)造函數(shù)
this.setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
publicvoid paint(Graphics g){ //創(chuàng)建Graphics畫(huà)圖
super.paint(g);
g.setColor(Color.black);
g.drawRe 45、ct(50,50,400,400); //畫(huà)棋盤(pán)邊界
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j, 100*i-50, 50, 50); //畫(huà)棋盤(pán)黑格1
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j-50, 100*i, 50, 50); //畫(huà)棋盤(pán)黑格2
g.setColor(Color.blue);
Font num=new Font("楷體",Font.BOLD,25);
g.se 46、tFont(num); //設(shè)置字體
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
g.drawString(seed[i][j]+"", 50*j+15,50*i+35); //打印棋盤(pán)格中數(shù)字
}
publicvoid write(int output[][]){ //將結(jié)果數(shù)組引入Jframe類(lèi),并賦給數(shù)組seed
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
seed[i][j]=output[i][j];
}
} //Jframe
------------- 47、-------------class Main----------------------
publicclass Main {
publicstaticvoid main(String[] args) {
int i,j;
int [][]way=newint[9][9]; //初始化可算路徑數(shù)數(shù)組
int [][]output=newint[9][9]; //初始化結(jié)果輸出數(shù)組
jisuan ad=new jisuan();
ad.init(way); //運(yùn)行計(jì)算類(lèi)
shuchu aw=new shuchu();
aw.calcu(output, w 48、ay); //運(yùn)行輸出類(lèi)
System.out.printf("運(yùn)行結(jié)果如下(稍后會(huì)以棋盤(pán)界面顯示,為便于看圖,相鄰兩步之間棋盤(pán)顏色不同):\n");
for(i=1;i<=8;i++){ //輸出
for(j=1;j<=8;j++)
System.out.printf("%6d",output[i][j]);
System.out.printf("\n");
}
Jframe w=new Jframe(); //圖形用戶輸出
w.write(output); //載入結(jié)果輸出數(shù)組
} //main
} //Main
附錄B 運(yùn)行截屏
4.1第一次輸入坐標(biāo)(6,6)
圖4-1 第一次輸入截圖
圖4-2 第一次運(yùn)行結(jié)果截圖
〔其中數(shù)字編號(hào)即為馬踏棋盤(pán)的順序〕
4.2第二次輸入坐標(biāo)(8,1)
圖4-3 第二次輸入截圖
圖4-4 第二次運(yùn)行結(jié)果截圖
4.3第三次輸入坐標(biāo)(5,9)
圖4-5 第三次輸入截圖
圖4-6 第三次運(yùn)行結(jié)果截圖
26 / 26
- 溫馨提示:
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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)銷(xiāo)售工作總結(jié)區(qū)域績(jī)效完成情況明年工作計(jì)劃
- 人資部部門(mén)年終總結(jié)人力資源規(guī)劃與實(shí)施
- 教師課程總結(jié)匯報(bào)提升教學(xué)質(zhì)量與反思教學(xué)過(guò)程
- 2025年中小學(xué)校黨建工作計(jì)劃2篇例文
- 2025年學(xué)校黨建工作計(jì)劃(工作要點(diǎn))5篇范文
- 2025年學(xué)校黨建工作計(jì)劃例文【3份】
- 初中英語(yǔ)知識(shí)點(diǎn)總結(jié):英語(yǔ)副詞精華講解
- 施工安全事故易發(fā)期
- 安全管理人員安全工作總結(jié)范文
- 初中英語(yǔ)重點(diǎn)語(yǔ)法:三大從句總結(jié)
- 鐵路廣場(chǎng)冰雪等極端天氣的安全應(yīng)急預(yù)案
- 安全培訓(xùn)資料:某公司職業(yè)病防治宣傳教育培訓(xùn)制度
- 初中英語(yǔ)最齊全的8大時(shí)態(tài)
- 硝酸使用安全和典型案例、對(duì)策
- 安全培訓(xùn)資料:某公司職業(yè)病危害事故處置與報(bào)告制度