順時針列印矩陣

2021-06-09 06:09:59 字數 1625 閱讀 8643

from:

題目:輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

例如:如果輸入如下矩陣: 

1   2   3   4 

5   6   7   8 

9  10 11 12 

13 14 15 16 

則依次列印出數字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。

網上聽說聽到包括autodesk、emc在內的多家公司在面試或者筆試裡採用過這道題。但是看有些人做的,頭暈。還是自己弄了弄。 

解題思路(借鑑 迷宮問題):1)在矩陣周圍 新增一堵牆 (-1);

2)分為四個方向運動,向右,向下,向左,向右。 

3)在碰到牆 或者 已經走過的點, 則改變方向,方向的改變依賴上條的四個方向,依次迴圈找下乙個方向。(而具體方向的執行,表現在 下標的改動)。 

4)用printcount計數列印了的點數,也就是 走過的路徑長度,而總路徑長度是size*size的,如果大於它了,則不需要在往下執行

[c-sharp]view plain

copy

//#include "stdafx.h"

#define max_size 100

intmatrix[max_size][max_size];  

intsize;  

#define start_x 1

#define start_y 0

intend_x,end_y;  

typedef enum

direction;  

//wall is -1, if has walked also change value to -1

void

buildoutsidewall()  

for(int

i=1;i

}  direction  changedirection(int

dir)  

}  void

printclockwisematrix()  

else

break

;  case

down:  

if(matrix[i+1][j]!=-1)  

else

break

;  case

left:  

if(matrix[i][j-1]!=-1)  

else

break

;  case

up:  

if(matrix[i-1][j]!=-1)  

else

break

;  }  

}  }  

int_tmain(

intargc, _tchar* argv)  

printclockwisematrix();  

return

0;  

}    

1、這是在假定輸入的矩陣不會出現-1情況下,如果說可以出現任何數,我們可以新增其他邏輯進行控制,原理是一樣的。例如新增乙個bool陣列標記矩陣的每乙個點的走過狀態。

2、假如不可以 新增圍牆,那麼我們可以檢測 邊界,即檢測當前列印如果是  角點,那麼換方向。

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...

順時針列印矩陣

題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...

順時針列印矩陣

來自 38 順時針列印矩陣 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。分析 包...