精华内容
下载资源
问答
  • 我们知道Python中是没有数组 这种数据结构的,所以要想实现回旋矩阵,需要先导入一个numpy包, 它是一个由多维数组对象和用于处理数组的例程集合组成的python扩充程序库,可以用来做数组算数和逻辑运算 思路: 首先...
  • lua输出回旋矩阵

    2019-07-04 17:25:25
    local w,h = 7,9 --定义矩阵的宽高 local x,y = 1,1 --起始角标 local d_x ,d_y = 0,1 --下一个角标的 增量 local cnt = 1 --起始值 local arr = {} --矩阵 --给矩阵赋值 初始值全部为0 for i=1,w do for j=1,h do...
    local w,h = 7,9 --定义矩阵的宽高
    local x,y = 1,1	--起始角标
    local d_x ,d_y = 0,1 --下一个角标的 增量
    local cnt = 1 --起始值
    local arr = {} --矩阵
    --给矩阵赋值  初始值全部为0
    for i=1,w do
     	for j=1,h do
      		if arr[i] == nil then
       		arr[i] = {}
      		end
      		arr[i][j] = 0
     	end
    end
    --开始回旋赋值
    while(cnt <= w*h) do
      arr[x][y] = cnt
      cnt = cnt + 1
      x = x + d_x
      y = y + d_y
      if d_y == 1 and (y>=h or arr[x][y+1] ~= 0) then--向下
    	   d_x = 1
    	   d_y = 0
      elseif d_x == 1 and (x>=w or arr[x+1][y] ~= 0) then--向左
           d_x= 0;
           d_y = -1;
      elseif d_y == -1 and (y<=0 or arr[x][y-1] ~= 0) then--向上
           d_x = -1;
           d_y = 0;
      elseif d_x == -1 and (x<=0 or arr[x-1][y] ~= 0) then--向右
    	   d_x= 0;
    	   d_y = 1;
      end
    end
    --输出回旋矩阵
    for i=1,w do
      	local str = ""
      	for j=1,h do
       		str = str .."、"..arr[i][j]
      	end
      	print(str)
    end
    
    展开全文
  • 之前在面试的时候遇到过这样一个题目:观察下列数字规律,并将其打印在控制台3 2 94 1 85 6 713 12 11 10 2514 03 02 09 2415 04 01 08 2316 05 06 07 2217 18 19 20 21............解题思路:(1)每个矩阵看成一圈,...

    之前在面试的时候遇到过这样一个题目:

    观察下列数字规律,并将其打印在控制台

    3   2   9

    4   1   8

    5   6   7

    13   12   11   10   25

    14   03   02   09   24

    15   04   01   08   23

    16   05   06   07   22

    17   18   19   20   21

    ..........

    解题思路:

    (1)每个矩阵看成一圈,一圈一圈循环赋值

    (2)一圈赋值完成之后,控制向外扩张一圈,就可以实现这个算法了

    说明:下面是我加以改进过的算法,实现的任意方向的旋转(顺时针逆时针旋转,上下左右控制初始旋转方向(总共8中构建方法))

    package util;

    import java.util.regex.Pattern;

    public class HuiXuanJuZheng {

    private int [][] matrix;

    private int x ;

    private int y;

    private String rotateDirection;

    private String direction;

    private String directionInit;

    private int layer;

    /**

    *

    * @param 圈数

    * @param CCK|CK,逆时针|顺时针

    * @param up|down|left|right,初次旋转方向 上下左右

    */

    public HuiXuanJuZheng(int layer,String rotateDirection, String directionInit) {

    if (Pattern.matches("CCK|CK",rotateDirection)&&Pattern.matches("up|down|left|right",directionInit)) {

    this.matrix = new int[2*layer-1][2*layer-1];

    this.x=layer-1;

    this.y=layer-1;

    this.rotateDirection=rotateDirection;

    this.direction=directionInit;

    this.directionInit=directionInit;

    this.layer=layer;

    constructMatrix();

    }else {

    matrix = null;

    }

    }

    public void constructMatrix(){

    /*当前圈数*/

    int currentLayer=1;

    /*赋值次数*/

    int time=1;

    String[] flag ={"up","right","down","left"};

    if (rotateDirection == "CCK") {

    String[]flagC = {"down","right","up","left"};

    flag=flagC;

    }

    /*遍历赋值*/

    for (int i = 1; i <= Math.pow(2*layer-1, 2); i++) {

    matrix[x][y] = i;

    boolean fla=false;

    if (Math.pow(2*currentLayer-1,2) == i) {

    currentLayer ++;

    xy(directionInit);

    time=1;

    fla=true;

    }else{

    xy(null);

    }

    time++;

    if (rotateDirection == "CCK") {

    switch (direction) {

    case "down":

    if ((2*currentLayer-2) == time) {

    direction = flag[1];

    time=0;

    }

    break;

    case "right":

    if ((2*currentLayer-2) == time) {

    direction = flag[2];

    time=0;

    }

    break;

    case "up":

    if ((2*currentLayer-2) == time) {

    direction = flag[3];

    time=0;

    }

    break;

    case "left":

    if ((2*currentLayer-2) == time) {

    direction = flag[0];

    time=0;

    }

    break;

    }

    }else {

    switch (direction) {

    case "up":

    if ((2*currentLayer-2) == time) {

    direction = flag[1];

    time=0;

    }

    break;

    case "right":

    if ((2*currentLayer-2) == time) {

    direction = flag[2];

    time=0;

    }

    break;

    case "down":

    if ((2*currentLayer-2) == time) {

    direction = flag[3];

    time=0;

    }

    break;

    case "left":

    if ((2*currentLayer-2) == time) {

    direction = flag[0];

    time=0;

    }

    break;

    }

    }

    if (fla) {

    time=1;

    fla=false;

    }

    }

    }

    private void xy(String directionInit) {

    String flay=directionInit!=null?directionInit:direction;

    switch (flay) {

    case "up":

    x--;

    break;

    case "down":

    x++;

    break;

    case "left":

    y--;

    break;

    case "right":

    y++;

    break;

    }

    }

    public int[][] getSwingMatrix(){

    return this.matrix;

    }

    public static void main(String[] args) {

    int [][] mam =new HuiXuanJuZheng(4, "CCK", "up").getSwingMatrix();

    for (int[] is : mam) {

    for (int i : is) {

    if (i<100) {

    System.out.print(i<10?"0"+i+" ":i+" ");

    }else {

    System.out.print(i+" ");

    }

    }

    System.out.println();

    }

    System.out.println();

    }

    }

    展开全文
  • # numpy导入 先在终端下输入pip install numpy,下载第三方包numpy import pprint import numpy def Matrix(): N = int(input('请输入数字m:')) M = int(input('请输入数字n:')) array = numpy.zeros((N, M)...
    # numpy导入  先在终端下输入pip install numpy,下载第三方包numpy
    
    import pprint
    import numpy
    
    
    def Matrix():
    
        N = int(input('请输入数字m:'))
        M = int(input('请输入数字n:'))
        array = numpy.zeros((N, M), dtype=numpy.int16)
        
        # 起始点
        x, y = 0, 0
        res = array[x][y] = 1
        
        while (res < N * M):
            # 改变起始的位置,可以改变旋转,但必须按规律来
            # 上  左-->右
            while (y + 1 < M and not array[x][y + 1]):
                res += 1
                y += 1
                array[x][y] = res
            # 右  上-->下
            while (x + 1 < N and (not array[x + 1][y])):
                res += 1
                x += 1
                array[x][y] = res
            # 下  右--->左
            while (y - 1 >= 0 and not array[x][y - 1]):
                res += 1
                y -= 1
                array[x][y] = res
            #左   下--->上
            while (x - 1 >= 0 and not array[x - 1][y]):
                res += 1
                x -= 1
                array[x][y] = res
    
        pprint.pprint(array)
    
    
    
    if __name__ == '__main__':
        Matrix()
    
    
    展开全文
  • 求N阶回旋矩阵(C/C++)

    2011-03-15 10:34:29
    求N阶回旋矩阵,在给定阶数的二维数组外构建搜索边界,使用试探法求解
  • 这是一个输出回旋矩阵的C语言程序,只要输入矩阵的大小然后按enter键就可以输出顺时针方向的回旋矩阵
  • 用C语言编写回旋矩阵,可以产生任意阶的回旋矩阵,包括矩阵,以及图形的表示,直观
  • 回旋矩阵

    2019-11-10 10:20:54
    var n = 11; var arr = []; for (var i=0; i<n; i++) { if (!arr[i]) { arr[i] = []; } for (var j=0; j<n; j++) { arr[i][j] = null; } } var i=0,j=0,k=0,b=0; ...
    var n = 11;
    
    var arr = [];
    for (var i=0; i<n; i++) {
        if (!arr[i]) {
            arr[i] = [];
        }
        for (var j=0; j<n; j++) {
            arr[i][j] = null;        
        }
    }
    
    var i=0,j=0,k=0,b=0;  
    for (var i=0; i< n/2; i++) {
    	console.log('------i : ' + i);
        for (var j=i; j<n-i; j++) {
        	arr[i][j] = ++b;
        }
        console.log('--------j :' + j);
        for (k = i+1,j--; k < n-i; k++) {
        	arr[k][j] = ++b;
        }
        console.log('--------k :' + k);
        for (j=--k,j--; j>=i; j--) {
        	arr[k][j] = ++b;
        }
        console.log('--------k :' + k);
        for (k--; k>i; k--) {
        	arr[k][i] = ++b;
        }
    }
    
    for (var i=0; i<arr.length; i++) {
     	var str = '';
     	for (var j=0; j<arr[i].length; j++) {
     		if (arr[i][j] < 10) {
    			str += (arr[i][j] + '    ');
     		} else if (arr[i][j] < 100) {
    			str += (arr[i][j] + '   ');
     		} else {
     			if (arr[i][j] == null) {
     				console.log('---------111 ');
     				str += ('   ');
     			} else 
     				str += (arr[i][j] + '  ');
     		}
     	}
     	str += '\n';
     	console.log(str);
     }

     

    展开全文
  • //矩阵分别为X方向的+-,y方向的加减 char cando = '+'; char dir = 'x'; int canchange = 1;//每次运算2条边则算法一换 //迭代和循环2种方法 calWhile(array,0,0,index,dir,cando,canchange); // cal(array,0...
  • 回旋矩阵

    千次阅读 2018-01-14 12:33:18
    之前面试的时候有一道关于螺旋矩阵的算法题,此处转载一篇: 结构图 将螺旋矩阵分为四个区块对其逐个赋值的。比如基数是,第一区块第一行元素1、2、3,第二区块是4,...
  • #内螺旋矩阵 def interSpiralMatrix(size, a=0, b=0): #size必须是奇数 if (size % 2 != 1): size += 1 #初始化矩阵 spiralMatrix = [([0] * size) for i in range(size)] # print(spiralMatrix...
  • #include<bits/stdc++.h> using namespace std; int a[110][110]; int main(){ int n,len,ans = 1; cin >> n; if(n%2==0)len = n/2; else len = n/2 + 1; for(int k=0;...j++)a[k][j] = ans++
  • 【C# / Algorithm】输出任意阶回旋矩阵

    千次阅读 2017-05-24 14:12:20
    输出顺时针的回旋矩阵,比较简单,就不多作说明了,直接贴代码,可以按需要翻译成其他语言版本,肯定有更简单高效的写法: static void Main() { int n = 6, m = 6; int[,] num = new int[n,m]; int...
  • 回旋矩阵

    2018-01-14 12:54:23
    /** 翻转矩阵为逆时针(为了便于后面逻辑处理,输出的时候再翻转回去) */ // 1 16 15 14 13 // 2 17 24 23 12 // 3 18 25 22 11 // 4 19 20 21 10 // 5 6 7 8 9 for ( int i = 1 ; i * n; i++...
  • c++:回旋矩阵(递归)

    2020-04-11 20:39:28
    题目:回旋矩阵 class solution { private: vector<vector<int>>plate; void test2(int x, int y, int n,int count) { if (n == 1) { plate[x][y] = count; return; } if (n == 0) ...
  • 矩阵分析:把回旋矩阵看作多个空心的矩阵,如图:注:五阶矩阵示意:然后找到每个空心矩阵和它上下左右的for循环关系即可,如图:注:六阶矩阵示意:其中重要的一点是:将矩阵的上下和左右对称分析,这样确保自己...
  • 蛇形回旋矩阵

    2019-10-06 10:50:02
    c语言代码 #include<stdio.h> int main(){ int n,m,turn=0,a=1,t=1; scanf("%d",&n); m = n; int b[m][n]; turn = n/2; if(n%2==1) b[(m-1)/2][(n-1)/2] = n*m;... for(int w=...
  • C#中的回旋矩阵

    2011-12-19 15:36:32
    一个C#的算法,实现数字的回旋排列,从大到小,顺时针排列,核心算法适用于其他语言
  • 回旋矩阵详解

    2013-07-11 11:45:29
    先简单的介绍下题目: ...为参数,请打印对应的回旋数组,如下: input: 2 output: 1 2 4 3 input :3 output: 1 2 3 8 9 4 7 6 5 input :4 output: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 
  • /***========================================*int i=5;*1 2 3 4 5*16 17 18 19 6*15 24 25 20 7*14 23 22 21 8*13 12 11 10 9*========================================*int i=6*1 2 3 4 5 6*20 21 22 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,067
精华内容 426
关键字:

回旋矩阵