首先,看一下螺旋矩陣的樣子.如下圖:
求螺旋陣列的**如下(dev-cpp平台):
#include using namespace std;
int** alloc_mat(int round); //動態二維陣列的分配
void del_mat(int **mat, int round); //刪除動態分配的二維陣列
void print_mat(int **mat, int round); //列印二維陣列
void fill_mat(int **mat, int round); //填充陣列為螺旋陣列
int main()
while (round <= 0);
spiral_mat = alloc_mat(round);
fill_mat(spiral_mat,round);
print_mat(spiral_mat, round);
del_mat(spiral_mat, round);
system("pause");
return 0;
}int** alloc_mat(int round)
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
mat[i][j] = 0;
return mat;
}void del_mat(int **mat, int round)
void print_mat(int **mat, int round)
cout << endl;
}void fill_mat(int **mat, int round)
}
我們還可以進一步把fill_mat函式進行優化. 上面fill_mat函式是採取一層一層賦值,然後一層裡再沿順時針方向,取一圈為4條邊, 即一條邊一條邊賦值.
我們可以直接一圈圈賦值.參考下面fill_mat2函式.
void fill_mat2(int **mat, int round)
val += 4 * 2 * r;
r++;
} }
如果矩陣是由外往內螺旋,如下圖.
那麼如何實現呢? 其實也不難, **如下:
void fill_mat(int **mat, int mat_size)
}
列印螺旋矩陣
螺旋矩陣是乙個nxn的方陣,其中元素為自然數,但像螺旋方向一樣遞增。舉例如下 若n 3,螺旋矩陣為 1 2 3 8 9 4 7 6 5若n 4,螺旋矩陣為 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7若n 5,螺旋矩陣是 1 2 3 4 5 16 17 18 19 6...
列印螺旋矩陣(遞迴解法)
求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是 蠻力 解法,不得不陷入一堆的i j 迴圈之中。最後想出一種遞迴解法,現記錄如下。題目如下 輸入 n,列印 n n 螺旋矩陣 比如 n 3 列印 1 2 3 8 9 4 7 6 5 n 4 列印 1 2 3 4 12 13 14 ...
列印螺旋矩陣(遞迴解法)
求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是 蠻力 解法,不得不陷入一堆的i j 迴圈之中。最後想出一種遞迴解法,現記錄如下。題目如下 輸入n,列印 n n 螺旋矩陣 比如 n 3,列印 1 2 3 8 9 4 7 6 5 n 4,列印 1 2 3 4 12 13 14 5...