NYOJ33 蛇形填數

2021-06-27 04:52:23 字數 1310 閱讀 5456

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3 描述

在n*n方陳裡填入1,2,...,n*n,要求填成蛇形。例如n=4時方陳為:

10 11 12 1

9 16 13 2

8 15 14 3

7 6 5 4

輸入直接輸入方陳的維數,即n的值。(n<=100)

輸出輸出結果是蛇形方陳。

樣例輸入

3

樣例輸出

7 8 1

6 9 2

5 4 3

my cpp:

#include#include//一直往乙個方向走 

int main()

;while((a[i-1][j]==0)&&((i-1>=0&&i-1=0&&j;

while((a[i][j+1]==0)&&((i>=0&&i=0&&j+1; 

while((a[i][j-1]==0)&&((i>=0&&i=0&&j-1;}

for(i=0;i

return 0;

}}//如何記住上一次選擇的方向,因為要優先保證與上一次方向相同。

很明顯,首先思路是要建立乙個二維陣列。

這道題主要就是考了如何找到1至n*n這n*n個數所對應的二維陣列的位置,一些比較高階的**通常都會去找到每個數與其對應位置的序列號的數學關係,這樣的**程式設計需要較好的數學與演算法應用能力,筆者暫時能力不夠,所以從最簡單的思路來做的,那就是乙個乙個按順序增加賦值的同時,找到所需路徑,這個似乎可以歸於搜尋一類。

我的想法就是從初始位置,首先給乙個初始方向,由於在路徑中,我們不能後退,所以我們要想辦法區分未賦值與已賦值的位置,我選擇了子在最開始給整個二維陣列賦0(因為被賦值後的位置上數值始終要大於0),這樣就解決了第乙個問題。然後就是怎樣尋找可走路徑,這個比較好想到,每個位置有四個方向,將所有點束縛在n*n的矩陣中,就限定了前進範圍,然後最重要的就是保證在滿足上述條件時,一直朝著乙個方向走,直到到了角點處,此時要改變方向,不過很明顯,只有乙個方向可選,這樣就可以在乙個方向可走時把這一段放進乙個迴圈,迴圈結束時必然到了乙個角點,再判斷方向即可繼續走下去,直到這n*n個數都已被賦值。

從而解決了這一問題。

說起來這一題還是挺好想的,並沒有一點思維陷阱,只要靜下心來好好想一下解決方案就能很容易的解決了。

NYOJ 33 蛇形填數

類似數學中的矩陣,我們可以用乙個所謂的二維陣列來儲存題目中的方陣。此題不要求嚴格輸出格式!技巧 首先從第乙個數1開始依次填寫。設筆的座標為 x,y 一開始x 0,y n 1。還有就是需要進行 預判 即是否越界,以及如果繼續走下去會不會到達乙個已經填過的格仔。總的原則就是 先判斷,再移動。越界只需判斷...

nyoj33 蛇形填數

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。樣例輸入 3...

NYOJ 33 蛇形填數

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。樣例輸入 3...