資料結構 第10講 好玩貪吃蛇 數字矩陣

2021-08-22 18:06:57 字數 1737 閱讀 8204

資料結構 第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...