您的位置:首页 > 其它

算法 - 蛇形矩阵输出

2017-04-23 15:27 656 查看
思路:

1. 创建n*n的二维数组。

2. 定义四个填充的方法,分别是→、↓、←、↑。

3. 当需要填充时,确定方向,然后从外向内遍历找到空缺的位置进行填充。

var print = function (n) {
var lineArr = [];
var j, k;
for (j = 0; j < n; j++) {
lineArr[j] = new Array();
for (k = 0; k < n; k++) {
lineArr[j][k] = undefined;
}
}

var type = 1,
typeCount = 4;
var func = getFunc(type);
for (var i = 1; i <= n * n; i++) {
i = func(lineArr, n, i)
type++;
if (type > typeCount) type = 1;
func = getFunc(type);
}
j = k = 0;

for (; j < n; j++) {
console.log(lineArr[j].join(' '));
}
};
var getFunc = function (type) {
switch (type) {
case 1: return func1;
case 2: return func2;
case 3: return func3;
case 4: return func4;
}
}
//→
var func1 = function (lineArr, n, intNum) {
var isBreakOutterFor = false;
for (var i = 0; i <= Math.ceil(n / 2); i++) {//行
for (var j = 0; j < n; j++) {//列
if (typeof lineArr[i][j] == 'undefined') {
lineArr[i][j] = intNum++;
isBreakOutterFor = true;
}
}
if (isBreakOutterFor) return intNum - 1;
}
return intNum;
}
//↓
var func2 = function (lineArr, n, intNum) {
var isBreakOutterFor = false;
for (var i = n - 1; i >= Math.floor(n / 2); i--) {//列
for (var j = 0; j < n; j++) {//行
if (typeof lineArr[j][i] == 'undefined') {
lineArr[j][i] = intNum++;
isBreakOutterFor = true;
}
}
if (isBreakOutterFor) return intNum - 1;
}
return intNum;
}
//←
var func3 = function (lineArr, n, intNum) {
var isBreakOutterFor = false;
for (var i = n - 1; i >= Math.floor(n / 2); i--) {//行
for (var j = n - 1; j >= 0; j--) {//列
if (typeof lineArr[i][j] == 'undefined') {
lineArr[i][j] = intNum++;
isBreakOutterFor = true;
}
}
if (isBreakOutterFor) return intNum - 1;

}
return intNum;
}
//↑
var func4 = function (lineArr, n, intNum) {
var isBreakOutterFor = false;
for (var i = 0; i < Math.floor(n / 2); i++) {//列
for (var j = n - 1; j >= 0; j--) {//行
if (typeof lineArr[j][i] == 'undefined') {
lineArr[j][i] = intNum++;
isBreakOutterFor = true;
}
}
if (isBreakOutterFor) return intNum - 1;
}
return intNum;
}
print(6);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 蛇形矩阵