求螺旋矩阵指定坐标的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求螺旋矩阵指定坐标的值相关的知识,希望对你有一定的参考价值。
螺旋矩阵定义:螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。
坐标(4,3)对应的数字为34。
请定义一个函数,输入n,x,y(n为螺旋矩阵的阶数,x,y分别x轴、y轴坐标),返回n阶螺旋矩阵坐标(x,y)对应的数字。
#include<stdio.h> #include<assert.h> #define MIN(x, y) ({ typeof(x) _min1 = (x); typeof(y) _min2 = (y); (void) (&_min1 == &_min2); _min1 < _min2 ? _min1 : _min2; }) int getStartPointValue(int minIdx, int ulimit); int getPointValue(int n, int row, int col); int main(){ int size = 0, x = 0, y = 0; printf("Please input 3 integers as the size, x and y of a 2-dimension matrix.\n"); scanf(" %u %u %u", &size, &x, &y); int result = getPointValue(size, x, y); return 0; } int getStartPointValue(int minIdx, int ulimit){ assert(minIdx >= 0 && minIdx <= ulimit); if(minIdx == 0){ return 1; } else{ int new_minIdx = minIdx - 1; int new_maxIdx = ulimit - new_minIdx; return (new_maxIdx - new_minIdx) * 4 + getStartPointValue(new_minIdx, ulimit); } } int getPointValue(int n, int row, int col){ assert(row >= 1 && row <= n); assert(col >= 1 && col <= n); const int ulimit = n - 1, x = row - 1, y = col - 1; int minIdx = -1, maxIdx = -1; int sval = -1, result = -1; minIdx = MIN( MIN(x, ulimit - x), MIN(y, ulimit - y) ); maxIdx = ulimit - minIdx; sval = getStartPointValue(minIdx, ulimit); if(y == minIdx){ result = sval + x - minIdx; } else if(x == maxIdx){ result = sval + (maxIdx - minIdx) + ( y - minIdx); } else if(y == maxIdx){ result = sval + (maxIdx - minIdx) * 2 + maxIdx - x; } else if (x == minIdx){ result = sval + (maxIdx - minIdx) * 3 + maxIdx - y; } else assert(0); printf("(%u,%u,%u)=%u\n", n, row, col, result); printf("minIdx=%u, maxIdx=%u, sval=%u\n", minIdx, maxIdx, sval); return result; }
本文出自 “用C++写诗” 博客,谢绝转载!
以上是关于求螺旋矩阵指定坐标的值的主要内容,如果未能解决你的问题,请参考以下文章
Python数据结构:BF算法匹配括号回文链表生成螺旋矩阵移除列表元素计算后缀表达式的值顺时针旋转n维矩阵90度折半查找