ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

螺旋形遍历奇数阶矩阵

螺旋形遍历奇数阶矩阵 这道编程问题和leetcode上的不太一样,具体代码实现操作的是奇数阶矩阵从奇数阶矩阵的中心单元开始自里向外螺旋形遍历矩阵的所有元素遍历过程中用递增计数器标记经过的元素.以下代码中的run_order表示遍历方向遵循的循环次序,譬如代码中的vectorsize_t run_order { 3, 0, 2, 1 };表示遍历时先向上走再向左走再向下走最后向右走随后不断重复这一方向循环直到矩阵所有元素均被访问为止.注意以下代码并不适用于一阶矩阵C代码:#includeiostream#includevector#includeutilityusingstd::vector;usingstd::pair;structCoord{longlongx;longlongy;Coord(size_t x,size_t y):x(x),y(y){}Coordoperator(constCoordc){returnCoord(xc.x,yc.y);}Coordoperator-(){returnCoord(-x,-y);}};intmain(){size_t N3;//N为奇数,N3,N 1的情形是平凡的,不予考虑vectorvectorsize_tmatrix(N,vectorsize_t(N,0));//左,右,下,上vectorCoordoffset{Coord(0,-1),Coord(0,1),Coord(1,0),Coord(-1,0)};vectorsize_trun_order{3,0,2,1};//方向,0-左,1-右,2-下,3-上size_t pre_d3;size_t d0;longlongxN/21;longlongyN/21;Coordc(x,y);size_t count1;matrix[c.x-1][c.y-1]count;ccoffset[run_order[d]];while(true){matrix[c.x-1][c.y-1]count;Coord temp_cc(-offset[run_order[pre_d]]);if(matrix[temp_c.x-1][temp_c.y-1]!0){ccoffset[run_order[d]];if(c.x0||c.xN1||c.y0||c.yN1){break;}}else{ctemp_c;pre_dd;d(d1)%4;}}for(size_t i0;iN;i){for(size_t j0;jN;j){std::coutmatrix[i][j] ;}std::coutstd::endl;}return0;}
返回列表