一個m*n的矩陣里按照下圖形式填充,最后形成的矩陣即為蛇形矩陣,下圖是m=4, n =5時的蛇形矩陣:

方法一:逐層循環
#include <iostream>
using namespace std;
const int ROW = 6;
const int COLUMN = 10;
const string space = " ";
void setSnakeMatrix(int array[ROW][COLUMN], int start)
{
int x = 0, y = 0;
while(start<ROW*COLUMN)
{
//上行:從左向右
while(y+1<COLUMN && array[x][y+1]==0)
{
array[x][y++] = start++;
}
//右列:從上向下
while(x+1<ROW && array[x+1][y]==0)
{
array[x++][y] = start++;
}
//下行:從右向左
while(y-1>=0 && array[x][y-1]==0)
{
array[x][y--] = start++;
}
//左列:從下向上
while(x-1>=0 && array[x-1][y]==0)
{
array[x--][y] = start++;
}
}
//最后一個
array[x][y] = start;
}
void displayMatrix(int array[ROW][COLUMN])
{
for(int row = 0; row<ROW; row++)
{
for (int column = 0; column<COLUMN; column++)
{
if(array[row][column]>=10)
{
cout<<array[row][column]<<space;
}else{
cout<<array[row][column]<<space<<space;
}
}
cout<<endl;
}
}
int main() {
//定義二維數組,初始化全為0,由於蛇形矩陣從1開始遞增,所以全部元素都不會為0,
//因此可以將0作為判斷條件
int array[ROW][COLUMN] = {0};
//設置蛇形矩陣
setSnakeMatrix(array, 1);
//輸出
displayMatrix(array);
return 0;
}