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。分析 包...