資料結構 第10講 好玩貪吃蛇——數字矩陣
上題目:
這是螺旋狀的分布啊,有點像棒棒糖上面的圓圈圈。那麼怎麼解呢?
一種思路:先填外圍一圈,然後把內部看作乙個子問題,繼續填充。
即前面的4*n-4個元素順時針填充外圍,
剩下的問題變成用後面的元素填充乙個規模為n-2的子問題。
再用剩餘元素的前面4*(n-2)-4個元素順時針填充規模為n-2的子問題外圍,
剩下的問題變成用後面的元素填充乙個規模為n-4的更小的子問題
依次類推。
當n=1時填唯一的乙個數即可。
換一種思路:把放出乙個好玩的貪吃蛇,按照右下左上的順序吃蛋糕,一邊吃蛋糕,一邊拉數字,多吃乙個蛋糕,拉出的數字多1,直到把所有的蛋糕吃完。
當貪吃蛇把小蛋糕吃完的時候,畫風就變成了這樣:
那麼程式設計怎麼做呢?
因為貪吃蛇出動按照右下左上四個方向,因此先定義乙個方向偏移陣列:
向右:行+0,列+1;偏移量:dir[0].x=0; dir[0].y=1;
向下:行+1,列+0;偏移量:dir[1].x=1; dir[1].y=0;
向左:行+0,列-1;偏移量:dir[2].x=0; dir[2].y=-1;
向上:行-1,列+0;偏移量:dir[3].x=-1; dir[3].y=0;
定義了偏移陣列後,就可以從左上角開始,先向右走,只要有蛋糕或未到邊界就繼續前進,否則選擇下乙個方向,一直走下去,直到拉出的數字達到最大值n2,演算法停止。
那麼你怎麼知道有沒有蛋糕呢?
因為吃了蛋糕後,這個方格就變成了乙個大於零的數字,因此我們可以設定為0時有蛋糕。
那麼你怎麼知道有沒有到達邊界呢?
四周封鎖:
做了封鎖之後,小貪吃蛇再也不用擔心跑出邊界了,它只需要按照右下左上的方向,只吃有蛋糕的格仔(為0)就可以了。
原始碼:using namespace std;
typedef struct
position;//位置
int m[30][30];//地圖
position here,next;//當前位置,下乙個位置
position dir[4]=;//右下左上方向陣列
void init(int n)
for(int j=0; j<=n+1; j++) //方格陣列上下圍牆
m[0][j]=m[n+1][j]=-1;
for(int i=0; i<=n+1; i++) //方格陣列左右圍牆
m[i][0]=m[i][n+1]=-1;
}void print(int start,int endi)//start, endi為開始和結束下標
{ for (int i=start; i<=endi; i++)
{ cout<
資料結構大作業 純C雙鏈表實現貪吃蛇
整理電腦檔案資料,發現的自己18年 大一下學期 寫的資料結構大作業貪吃蛇。時光流逝,轉眼間2年就過去了。老師意見 有存檔功能,就能滿分了。看 借思路,獨自實現,成長自己。遊戲效果圖如下 如下 include include include include include define wid 40 ...
《資料結構打卡》第10天 排序篇
各種排序的說明 各種排序比較次數 插入 排序 最少n 1 最多n n 1 2 冒泡 排序 最少n 1 最多n n 1 2 選擇 排序 最少最多為n n 1 2 快速 排序 最少nlog2n 最多n2 歸併 排序 nlog2n 2n 1 logn 一 例如 關鍵字 45 80 48 40 22 78 ...
棧與佇列 第10章 基本資料結構
棧 後進先出 last in,first out,lifo 佇列 先進先出 first in,first out,fifo 壓入 push 無元素引數的delete pop s.top 不包含任何元素時,棧為空的。查詢棧是否為空時,用查詢操作 stack empty。對空棧執行彈出操作稱為下溢 un...