基礎練習 回形取數

2021-08-16 03:57:56 字數 1750 閱讀 5694

題目鏈結

description

回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。

input

輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。

output

輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用乙個空格分隔,行末不要有多餘的空格。

sample input

no.1

3 3

1 2 3

4 5 6

7 8 9

no.2

3 2

1 2

3 4

5 6

sample output

no.1

1 4 7 8 9 6 3 2 5

no.2

1 3 5 6 4 2

乙個n*m的矩陣,『蛇形』輸出。

這個題難點大概就是控制下標吧。

我的做法是把要輸出數的下標存在佇列裡,最後一併輸出。

對於乙個m*n的矩陣,『蛇形』取出的順序是:i++,j++, i- -, j- - ……

雜湊陣列用來標記數是否已經取出,如果到了臨界點就更改方向。

具體見**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define max(a,b) (a>b?a:b)

#define min(a,b) (a#define swap(a,b) (a=a+b,b=a-b,a=a-b)

#define memset(a) memset(a,0,sizeof(a))

#define x (sqrt(5)+1)/2.0 //wythoff

#define pi acos(-1)

#define e 2.718281828459045

using

namespace

std;

typedef

long

long

int ll;

const

int maxl(1e6);

const

int inf(0x3f3f3f3f);

const

int mod(1e4+7);

int dir[4][2]= ,,,};

int a[300][300];

struct node

nod;

int haxi[300][3000];

int main()

}int num=0;

int flag=0;

for(int i=1,j=1; num//迴圈終止條件是當把全部數取完後,跳出。

else

if(flag==1)

else

if(flag==2)

else

if(flag==3)

}int x=q.front().x;

int y=q.front().y;

q.pop();

cout

}

基礎練習 回形取數

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...

基礎練習 回形取數

基礎練習 回形取數 時間限制 1.0s 記憶體限制 512.0mb 提交此題 錦囊1 錦囊2 問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個...

基礎練習 回形取數

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...