解螺旋数组

来源:互联网 发布:淘宝宝贝什么时候下架 编辑:程序博客网 时间:2024/05/29 19:19

没错, 我就是有这么无聊....

大概就是碰到边界就转90°走就行了.

#include "stdafx.h"#include <iostream>int statTable[4] = { 1, 2, 3, 0 };int moveTable[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };const int Fog = -1;typedef void(*MatrixCallback)(int* matrix, int m, int n);void Matrix(int m, int n, MatrixCallback result){if (m <= 0 || n <= 0){return;}auto matrix = new int[m * n];memset(matrix, Fog, m * n * sizeof(int));int x = 0;int y = 0;int stat = 0;int loop = 0;do{matrix[y * n + x] = loop;auto tmpY = y + moveTable[stat][0];auto tmpX = x + moveTable[stat][1];if (tmpY >= m || tmpX >= n || tmpY < 0 || tmpX < 0 || matrix[tmpY * n + tmpX] != Fog){stat = statTable[stat];y += moveTable[stat][0];x += moveTable[stat][1];}else{y = tmpY;x = tmpX;}} while (++loop < m * n);if (result != NULL){result(matrix, m, n);}delete[] matrix;}int _tmain(int argc, _TCHAR* argv[]){using namespace std;auto print = [](int* matrix, int m, int n) {for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){cout << matrix[i * n + j] << "\t";}cout << endl;}};Matrix(13, 7, print);return 0;}


0 0
原创粉丝点击