4、輸出路徑函式模組——輸出馬兒行走的路徑;
各模組之間的呼叫關係:
輸入的初始位置是否正確否是
(二)、詳細設計
(1)、定義標頭檔案和預定義
#include<>
#define maxsize 100
#define n 8
(2)、資料型別定義
int board[8][8定義棋盤
int htry1[8]=;
/*儲存馬各個出口位置相對當前位置行下標的增量陣列*/
int htry2[8]=;
儲存馬各個出口位置相對當前位置列下標的增量陣列*/
struct stack定義棧型別
int i行座標
int j列座標
int director儲存方向
}stack[maxsize定義乙個棧陣列
int top=-1棧指標
(3)、函式宣告
void initlocation(int xi,int yi); //馬兒在棋盤上的起始位置座標
int trypath(int i,int j馬兒每個方向進行嘗試,直到試完整個棋盤
void display輸出馬兒行走的路徑
(4)、起始座標函式模組
void initlocation(int xi,int yi)
(5)、探尋路徑函式模組
int trypath(int i,int j)
for(h=0;h<8;h根據可行路徑條數小到大按下表排序放入陣列d[8]中
director=stack[top].director;
if(top>=63如果走完整個棋盤返回1
return (1);
find=0表示沒有找到下乙個位置
for(h=director+1;h<8;h++) //向八個方向進行探尋
else否則退棧
}return (0);
}(6)輸出路徑函式模組
void display()
printf("\n");
}(5)主程式模組
void main()
printf("begin with %d board:\n\n", 8*(x-1)+y);
initlocation(x-1,y-1呼叫起始座標函式
}五、除錯分析
(1)、本次實驗的主要目的是在於掌握和理解棧的特性和它的應用。在編制該程式中遇到了很多問題。首先,在開始剛編制程式的時候遇到的問題是,程式編譯都通不過,主要在一些細節的問題上,還有在程式的返回值在剛開始時也沒有正確返回。
經過編譯慢慢除錯,編譯都能通過,沒有錯誤和警告。
(2)、雖然編譯都能通過,但是執行時卻出錯,程式不能終止,只有通過人工方式結束程式,可能是在某些地方出現了無限死迴圈了,然後在仔細檢查**,發現沒有標記馬兒嘗試的方向director,這樣的話,馬兒回溯的時候,下一次又有可能走那個方向,這樣就出現了死迴圈。
(3)、標記好馬兒嘗試的方向後,編譯執行,但是執行結果卻不符合程式所要求的結果,說明在演算法上肯定有錯誤,檢查發現,馬兒走的座標沒有控制後,它的橫縱座標必須控制0到7之間,否則的話馬兒就會踏出棋盤以外,這樣輸出的結果就不對。還有就是棋盤走過的位置要標記一下,以便下次走不重複走,當回溯的時候的記得把標記給清掉,這個地方有時候也很容易混淆。
(4)、還有一點就是,該程式運算量大,演算法複雜度高,所以執行的時候很慢,特別佔記憶體,cpu的使用也很高,幾乎都在70%到90%之間,配置低了可能還執行不了。
六、執行結果
結果1:
結果2:
七、實驗體會
馬踏小學「五一」期間安全隱患整改總結
馬踏小學2014年 五一 安全隱患整改總結根據上級有關檔案要求,我校於2014年4月28日組織了學校行政領導對安全隱患進行了排查。在排查中發現了許多隱患,分管學校安全的楊月燕老師都一一作了安全隱患筆錄。並通過開行政會議研究討論,並歸納總結出我校安全隱患的排查報告,共同提出了整改意見和建議。在 五一 ...
棋盤井實驗小學少先隊調研報告
記棋盤井第一小學少先隊習慣經營人生 棋盤井第一小學始建於1974年,是一所蒙漢合校,是棋盤井地區建校最早,文化底蘊深厚的一所學校。學校以 為學生的終身幸福和發展奠定基礎 的辦學理念為基礎,高舉 尊重個性 因材施教 以人為本 全面發展 的辦學目標,以 習慣經營人生,特長成就未來 為辦學特色,紮實開展工...
基於ArcGIS的棋盤製作實習報告
上海師範大學地理資訊系統專業 棋盤製作實習報告 基於arcgis製圖 孫文軍2013 10 22 基於國際數棋的棋盤資料和arcgis的製圖功能,實現棋盤的製作和整飾。棋盤製作實習報告 孫文軍2013 10 15 一 實習目的 通過製作棋盤來熟悉arcgis 的製圖功能。二 實習步驟 1 選擇棋盤 ...