大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 馬踏棋盤
《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 馬踏棋盤》由會員分享,可在線閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 馬踏棋盤(26頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、word 前言 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是解決實(shí)際的應(yīng)用問題,特別是非數(shù)值計算類型的應(yīng)用問題,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計就是為此目的一次實(shí)際訓(xùn)練。要求我們在對題目進(jìn)展獨(dú)立分析的根底上,完成設(shè)計和開發(fā),并最終承受嚴(yán)格的測試考核。以深化對數(shù)據(jù)結(jié)構(gòu)課程中根本概念、理論和方法的理解,提升綜合運(yùn)用所學(xué)知識處理實(shí)際問題的能力,使我們的的程序設(shè)計能力與調(diào)試水平有一個明顯的提升。 課程設(shè)計所安排的題目,都有一定的難度和深度,從抽象數(shù)據(jù)類型的提煉、數(shù)據(jù)結(jié)構(gòu)選擇到算法的設(shè)計,均由我們每個人自主完成。在一周的時間,歷經(jīng)查找參考資料、使用技術(shù)手冊、設(shè)計編碼和撰寫文檔的實(shí)踐,進(jìn)一步升華對軟件工程師和程序員人格素質(zhì)的認(rèn)識和理解
2、。 本課程設(shè)計的主要設(shè)計容是: 設(shè)計一個馬踏棋盤問題的演示程序。 即將馬隨機(jī)地放在國際象棋的8*8棋盤的某個方格中,然后令馬按走棋規(guī)如此開始進(jìn)展移動。要求馬將棋盤上的每個方格進(jìn)入且只進(jìn)入一次,走遍全部64個方格。要求編制非遞歸程序,求出馬的行走路線,將數(shù)字1,2,…,64依次填入一個8*8的方陣在屏幕上顯示輸出。 針對該問題本課程設(shè)計采用的是面向?qū)ο蟮拈_發(fā)語言Java,在Windows7, myeclipse8.5.0的平臺上開發(fā)出來,并有圖形界面。最終較好的實(shí)現(xiàn)了全部要求,達(dá)到了預(yù)期效果
3、。從中我也學(xué)到了很多,不僅僅是課堂外的新知識,還有那種會查資料,會學(xué)習(xí)新知識的能力。 這個課程設(shè)計的順利完成,離不開胡教師的指導(dǎo)和幫助,在他的細(xì)心指導(dǎo)和幫助下,我對馬踏棋盤程序開發(fā)的整個流程有了深刻地了解和系統(tǒng)地掌握,在這里學(xué)生表示真誠地感。另外也這次課程設(shè)計提供應(yīng)我?guī)椭耐瑢W(xué)們。此外,本課程設(shè)計還參考了一些文獻(xiàn)資料,在此向這些文獻(xiàn)資料的作者深表意。 本課程設(shè)計可作為數(shù)據(jù)結(jié)構(gòu)和Java課程教學(xué)的參考案例。 由于時間倉促和本人水平所限,設(shè)計中難免有不當(dāng)和欠妥之處,敬請教師不吝批評指正。
4、 筆者 目錄 摘要………………………………………………………………………………………………………………………………………3 第一章 需求分析………………………………………………………………………………………………………………….4 第二章 概要設(shè)計………………………………………………………………………………………………………………….5 2.1系統(tǒng)描述。。。。………………………………………………………………….5 …………………………………………………………………………..5 馬踏棋盤流程…………………
5、………………………………5 算法設(shè)計 第三章 詳細(xì)設(shè)計 3.1 Jisuan類實(shí)現(xiàn) Disizhang 4,2 Diwu Cankaowenxian Fulu 摘要 本課程設(shè)計中的程序?qū)崿F(xiàn)了馬踏棋盤問題的求解,并能夠演示起始位置在棋盤上任何位置的問題的實(shí)現(xiàn).程序采用圖形演示,使算法的描述更形象,更生動,使教學(xué)更能產(chǎn)生良好的效果。對于該程序,我嚴(yán)格按照面向?qū)ο蟮乃枷脒M(jìn)展開發(fā),其中有Jisuan類, Shuchu類, Jframe類和Main四個類。其中Jisuan類主要是初始化各點(diǎn)的可走路徑,并且刪除不合法的點(diǎn);Shuc
6、hu類主要最優(yōu)算法的實(shí)現(xiàn);Jframe類為圖形用戶界面的設(shè)計,主要完成棋盤的繪制和結(jié)果的打印;Main類主要是負(fù)責(zé)整個程序的控制。最終調(diào)試運(yùn)行通過,實(shí)現(xiàn)了全部要求,取得了理想效果。 關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤 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ī)科學(xué)與技術(shù)專業(yè)學(xué)生必做的集中實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完《數(shù)
10、據(jù)結(jié)構(gòu)》課程后進(jìn)展的一次全面的綜合練習(xí)。其目的在于通過課程設(shè)計,使學(xué)生能夠得到較系統(tǒng)的技能訓(xùn)練,從而鞏固和加深對數(shù)據(jù)結(jié)構(gòu)的根底理論知識的理解,培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)理論知識解決實(shí)際問題的能力,使學(xué)生成為具有扎實(shí)的計算機(jī)理論根底和較強(qiáng)的獨(dú)立動手能力的復(fù)合型、應(yīng)用型人才。 馬踏棋盤問題是一個古老而著名的問題,它最初是由大數(shù)學(xué)家Euler提出的. 問題是這樣的:國際象棋中的棋子(叫作馬)在一個空棋盤移動,問它能否經(jīng)過64格中的每一格且只經(jīng)過一次?(馬按L行移動,即在某方向前進(jìn)兩格接著在與原方向垂直的方向上前進(jìn)一格) 本程序?qū)崿F(xiàn)了馬踏棋盤問題的求解,并能夠演示起始位置在棋盤上任何位置的問題的實(shí)現(xiàn).
11、程序采用圖形演示,使算法的描述更形象,更生動,使教學(xué)更能產(chǎn)生良好的效果。 第二章 概要設(shè)計 本程序采用myeclipse8.5.0來編制整個程序,這樣既可以使大家對算法的實(shí)現(xiàn)有了一定的了解,也可以熟悉一下Java圖形界面以與Java語言的命名規(guī)。作為數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計,本人希望同時也能讓大家順便熟悉一下Java的根本語言結(jié)構(gòu)和強(qiáng)大的開發(fā)能力。 在馬踏棋盤的課程設(shè)計中,我們嚴(yán)格按照面向?qū)ο蟮乃枷脒M(jìn)展開發(fā),其中有Jisuan類, Shuchu類, Jframe類和Main類。讀者應(yīng)注意各個類之
12、間的關(guān)系,以便也能順道理解Java中類的思想。 。 馬踏棋盤流程 將馬隨機(jī)地放在國際象棋的8*8棋盤Board[8][8]的某個方格中,然后令馬按走棋規(guī)如此開始進(jìn)展移動。要求馬將棋盤上的每個方格進(jìn)入且只進(jìn)入一次,走遍全部64個方格。 算法設(shè)計 設(shè)計思想 ① 利用某種算法直接找到最優(yōu)解,算出最優(yōu)路徑,而不是一步步嘗試遇到錯誤回溯。 ②設(shè)一數(shù)組與棋盤坐標(biāo)一一對應(yīng)〔1,1〕到〔8,8〕,存放每個棋盤格上應(yīng)算出的路徑數(shù)字。 ③ 路徑從1~64存放到與棋盤數(shù)組中對應(yīng)的數(shù)組中,將數(shù)組當(dāng)形參傳到圖形用戶界面,利用Graphics繪制棋盤并打印數(shù)組。 ④ 建立主函數(shù),調(diào)用計
13、算路徑類和繪制棋盤類。 程序的運(yùn)行關(guān)系如圖2-1. 圖2-1 程序運(yùn)行關(guān)系圖 2.4.3算法結(jié)構(gòu)設(shè)計 ①最優(yōu)算法設(shè)計 準(zhǔn)備階段: (a) 按國際象棋馬的走法,最多有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中可能,為了滿足與棋盤一一對應(yīng)故用3×8數(shù)組。 (b) 創(chuàng)建數(shù)組int [][]way=new int[9][9]存放棋盤每點(diǎn)可走
14、的路徑數(shù)。 (c) 創(chuàng)建數(shù)組int [][]output=new int[9][9]存放最終繪制棋盤格中輸出的數(shù)字,即行走路線。 (d) 計算出棋盤上每點(diǎn)的可走路徑數(shù),存入way數(shù)組,超出棋盤邊界的點(diǎn)被舍棄,讓數(shù)組與棋盤一一對應(yīng)。 計算階段: (a) 從用戶輸入起始點(diǎn)坐標(biāo),存入m,n。 (b) 先假設(shè)每個點(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),依次類推,直至找出64個點(diǎn),即最優(yōu)路徑。 ②用戶輸入
15、 利用java提供的Scanner函數(shù)從操作臺進(jìn)展輸入。 ③圖形用戶界面 利用Jframe窗體建立圖形用戶界面,編寫構(gòu)造函數(shù),用Graphics()函數(shù)繪制矩形并填充顏色,畫出棋盤表格,并利用drawString()在相應(yīng)的棋盤坐標(biāo)中打印出output數(shù)組中數(shù)字。 第三章 詳細(xì)設(shè)計 3.1 Jisuan類實(shí)現(xiàn) public class jisuan { //計算棋盤中各點(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)和棋盤一一對應(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++) //計算各點(diǎn)可走路徑,如果合法便存儲 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),通過k的增長,改變行走的方向
18、 if(x>=1&&x<=8&&y>=1&&y<=8) //判斷是否落在棋盤,否如此不存儲 way[i][j]++ ; } }//init }//jisuan 注釋: 此類主要初始化各點(diǎn)的可走路徑,并且刪除不合法的點(diǎn)。 首先初始化way數(shù)組為0,然后利用for循環(huán)嵌套實(shí)現(xiàn)64次運(yùn)算,每次再嵌套一個執(zhí)行8次的循環(huán),利用k++實(shí)現(xiàn)改變行走路線,前提是path數(shù)組中已經(jīng)存儲了馬的行走規(guī)如此,根據(jù)每次到達(dá)的點(diǎn)判斷是否落在棋盤,假如合法如此相應(yīng)坐標(biāo)格的way數(shù)組自加1,以此來計算出棋盤中各點(diǎn)
19、的可走路線數(shù),完成最優(yōu)算法的準(zhǔn)備階段。 3.2 Shuchu類算法實(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("請輸入馬的起始位置坐標(biāo):x y(其中x,y均為正整數(shù),0<
20、x<9,0
21、 //初始可選路徑最小值為8 output[m][n]=z; //用output[][]來記錄所走路徑 way[m][n]=0; //走過的點(diǎn)可選路徑設(shè)為0,沒走過設(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),通過k的增長,改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8)
if(way[x][y]!=0) //沒走過的點(diǎn)
{
--way[x][y]; //可選路徑數(shù)減1,因?yàn)楸军c(diǎn)剛走過
if(way[x][y] 23、 //使a[x][y]存放最小可選路徑數(shù)的點(diǎn)
i=x;
j=y;}
}
}//for
m=i;n=j; //下一個點(diǎn)的坐標(biāo)
} //for“64次〞
}//判斷合法
else
System.out.println("錯誤:坐標(biāo)超出棋盤邊界!");
}//calu
}//shuchu
注釋:
此類為 24、主要最優(yōu)算法的實(shí)現(xiàn)類。
首先依然定義馬的行走路線,和一些循環(huán)中用到的變量。然后利用Scanner函數(shù)進(jìn)展用戶輸入。橫縱坐標(biāo)存入m和n。
判斷起始坐標(biāo)是否合法,合法如此用一個64次的循環(huán)分別寫入output數(shù)組中馬的行走路線,假設(shè)min的值為8。
用一個8次循環(huán)分別列出馬的可走路徑,假如合法且是沒走過的點(diǎn)將對應(yīng)的way數(shù)組減1,因?yàn)橄麓渭偃缱叩酱它c(diǎn),可選路徑數(shù)必然要減1,不可走已經(jīng)走過的點(diǎn)。如果該點(diǎn)的可走路徑數(shù) 25、
以此類推馬的整個行走路線就完成了,且已經(jīng)將1~64分別寫入到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畫圖
super.paint(g);
g.setColor(Color.black);
g.drawRect(50,50,400,400); //畫棋盤邊界
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j, 100*i-50, 50, 50); //畫棋盤黑格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); //畫棋盤黑格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); //打印棋盤格中數(shù)字
}
publicvoid write(int output[] 28、[]){ //將結(jié)果數(shù)組引入Jframe類,并賦給數(shù)組seed
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
seed[i][j]=output[i][j];
}
} //Jframe
注釋:
此類為圖形用戶界面,主要完成棋盤的繪制和結(jié)果的打印.
創(chuàng)建構(gòu)造函數(shù),設(shè)置窗體大小,使窗體可見.
創(chuàng)建Graphics()畫圖函數(shù),設(shè)置背景顏色為黑色,繪制棋盤邊框.因?yàn)閲H象棋棋盤為黑白交替方格,所以將黑色局部用Rectfill()函數(shù)畫出,就形成了棋盤,利用for循環(huán)將黑色方格分兩次畫完,設(shè)計的棋盤坐標(biāo)如下:
29、(50,50) (400,50)
(50,400) (400,400)
圖3-1 棋盤的設(shè)計
每個格子的長寬是50,50。
左斜線是第一次畫的黑格,右斜線是第二次畫的黑格.
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)行計算類
shuchu aw=new shuchu();
aw.calcu(output, way); //運(yùn)行輸出類
System.out.printf("運(yùn)行結(jié)果如下(稍后會以棋盤界面顯示,為便于看圖,相鄰兩步之間棋盤顏色不同):\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)用類并創(chuàng)建對象,對象調(diào)用函數(shù).
在控制臺同樣輸出一份結(jié)果,和圖形用戶界面的一樣.
創(chuàng)建窗體,并傳入output數(shù)組參數(shù)
流程圖如下:
圖3-2 Main類流程圖 32、
程序的源代碼參見附錄。
第四章 調(diào)試分析
這次課程設(shè)計我遇到如下問題,最終通過調(diào)試分析都得到了很好的解決。
4.1最優(yōu)算法的求解,無從下手,最后借鑒前輩的思路想到了走最小度數(shù)點(diǎn)的算法。
4.2 從shuchu類計算的結(jié)果無法傳入Jframe函數(shù),曾試過全局變量,但是分裝性不好,最后把結(jié)果數(shù)組當(dāng)作形式參數(shù)傳入Jframe類的一個write〔〕函數(shù)。
4.3無法在棋盤的格子上打印數(shù)字,因?yàn)閐rawstring〔〕函數(shù)只能打印字符型變量,而我的output是整形變量,最后利用drawstring〔output+“〞,50,50〕一個小技巧將int型轉(zhuǎn)化為str 33、ing型。
4.4剛開始棋盤畫得很麻煩,所以后期直接用填充色矩形畫出黑的,其余的就成了白的,并分兩步話出棋盤,感覺比擬簡單。
4.5開始無法使數(shù)組與棋盤坐標(biāo)一一對應(yīng)。
程序運(yùn)行截屏見附錄B。
第五章 總結(jié)
5.11最優(yōu)算法的求解,無從下手,最后借鑒前輩的思路想到了走最小度數(shù)點(diǎn)的算法。
5.12 從shuchu類計算的結(jié)果無法傳入Jframe函數(shù),曾試過全局變量,但是分裝性不好,最后把結(jié)果數(shù)組當(dāng)作形式參數(shù)傳入Jframe類的一個write〔〕函數(shù)。
5.13無法在棋盤的格子上打印數(shù) 34、字,因?yàn)閐rawstring〔〕函數(shù)只能打印字符型變量,而我的output是整形變量,最后利用drawstring〔output+“〞,50,50〕一個小技巧將int型轉(zhuǎn)化為string型。
5.14剛開始棋盤畫得很麻煩,所以后期直接用填充色矩形畫出黑的,其余的就成了白的,并分兩步話出棋盤,感覺比擬簡單。
5.15開始無法使數(shù)組與棋盤坐標(biāo)一一對應(yīng)。
5.2收獲與體會
總體感覺這個課題還是比擬簡單的,不找出問題的根本,就無法理解自己獲得的是什么,在一個星期的課程設(shè)計中,我將掌握的專業(yè)理論知識很好地運(yùn)用到對這個課題的理解中.做到了理論和實(shí)踐相結(jié)合,在實(shí)踐中加深了對專業(yè)理論知識的理解,并 35、提升了對理論知識的運(yùn)用能力,獲得了許多寶貴的經(jīng)驗(yàn)。
5.21 鞏固和加深了對數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運(yùn)用本課程所學(xué)知識的能力。
5.22 培養(yǎng)了我選用參考書,查閱手冊與文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考,深入研究,分析問題、解決問題的能力。
5.23 過實(shí)際編譯系統(tǒng)的分析設(shè)計、編程調(diào)試,掌握應(yīng)用軟件的分析方法和工程設(shè)計方法。
5.24 能夠按要求編寫課程設(shè)計報告書,能正確闡述設(shè)計和實(shí)驗(yàn)結(jié)果,正確繪制系統(tǒng)和程序框圖。
5.25 通過這次課程設(shè)計,培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐步建立正確的生產(chǎn)觀念、經(jīng)濟(jì)觀念和全局觀念。
由于時間緊迫,我做的這個課程設(shè)計可能還不十分完善,但重要的是,這次課程設(shè) 36、計讓我學(xué)到了很多知識。通過這次課程設(shè)計,我對數(shù)據(jù)結(jié)構(gòu)課程有了進(jìn)一步的了解和認(rèn)識,對數(shù)據(jù)結(jié)構(gòu)的理解上升到一個新的高度,也充分地了解到一個好的算法對于程序的重要性。
最后再次感這次課程設(shè)計提供應(yīng)我?guī)椭慕處?,同學(xué)們以與參考文獻(xiàn)
的作者們,你們!
參考文獻(xiàn)
【1】 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)〔c語言版〕.:清華大學(xué),2007
【2】Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,,Clifford Stein.
Introduction to Algorithms, Second Edition. : 高等教育, 2002
37、
【3】【美】s巴斯.計算機(jī)算法:設(shè)計與分析引論.朱洪等譯.:復(fù)旦大學(xué),1985
[4] Ralph Morelli. Java面向?qū)ο蟪绦蛟O(shè)計〔第三版〕.:清華大學(xué), 2008
【5】亦輝,華,胡潔.Java面向?qū)ο蟪绦蛟O(shè)計.:人民郵電,2008
附錄A 源代碼
-----------------------class jisuan-----------------------
publicclass jisuan{ //計算棋盤中各點(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)和棋盤一一對應(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++) //計算各點(diǎn)可走路徑,如果合法便存儲
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),通過k的增長,改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8) //判斷是否落在棋盤,否如此不存儲
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("請輸入馬的起始位置坐標(biāo):x y(其中x,y均為正整數(shù),0 41、 scan=new Scanner(System.in); //從鍵盤輸入起始點(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次寫入
min = 8; //初始可選路徑最小值為8
output[m][n]=z; //用output[][]來記錄所走路徑
way[m][n]=0; //走過的點(diǎn)可選路徑設(shè)為0,沒走過設(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),通過k的增長,改變行走的方向
if(x>=1&&x<=8&&y>=1&&y<=8)
if(way[x][y]!=0){ //沒走過的點(diǎn)
--way[x][y]; //可選路徑數(shù)減1,因?yàn)楸军c(diǎn)剛走過
if(way[x][y] 43、 }
} //for
m=i;n=j; //下一個點(diǎn)的坐標(biāo)
} //for“64次〞
} //判斷合法
else
System.out.println("錯誤:坐標(biāo)超出棋盤邊界!");
} //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畫圖
super.paint(g);
g.setColor(Color.black);
g.drawRe 45、ct(50,50,400,400); //畫棋盤邊界
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j, 100*i-50, 50, 50); //畫棋盤黑格1
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
g.fillRect(100*j-50, 100*i, 50, 50); //畫棋盤黑格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); //打印棋盤格中數(shù)字
}
publicvoid write(int output[][]){ //將結(jié)果數(shù)組引入Jframe類,并賦給數(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)行計算類
shuchu aw=new shuchu();
aw.calcu(output, w 48、ay); //運(yùn)行輸出類
System.out.printf("運(yùn)行結(jié)果如下(稍后會以棋盤界面顯示,為便于看圖,相鄰兩步之間棋盤顏色不同):\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ù)字編號即為馬踏棋盤的順序〕
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: 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案