环形矩阵

 1 /**
 2  * 环形矩阵
 3  *
 4  * @author jinfeng
 5  *
 6  */
 7 public class CircleMatrix {
 8
 9     /**
10      * 输入一个整数n,返回填充了数据的环形矩阵
11      *
12      * @param n
13      * @return
14      */
15     public static int[][] getCircleMatrix(int length){
16         int [][] matrix = new int[length][length];
17
18         int count = 1;
19
20         // 最外层for循环表示整个矩阵循环的次数,k在增加,l再减小
21         for(int k = 0, l = length; k < l; ++k, --l){
22             // 矩阵的上面的一行,要考虑不同循环中的起始下标
23             for(int i = k; i < l; ++i)
24                 matrix[k][i] = count++;
25             // 矩阵的右边的一列,起始下标从k+1行开始
26             for(int i = k + 1; i < l; ++i)
27                 matrix[i][l - 1] = count++;
28             // 矩阵的下面的一行,起始下标从l-2列开始
29             for(int i = l - 2; i >= k; --i)
30                 matrix[l - 1][i] = count++;
31             // 矩阵的左边的一列,起始下标从l-2行开始
32             for(int i = l - 2; i > k; --i)
33                 matrix[i][k] = count++;
34         }
35
36         return matrix;
37     }
38
39     public static void main(String[] args) {
40         int [][] matrix = getCircleMatrix(5);
41         for(int i = 0; i < matrix.length; ++i){
42             for(int j = 0; j < matrix[0].length; ++j)
43                 System.out.print(matrix[i][j] + "\t");
44             System.out.println();
45         }
46     }
47
48 }
时间: 2025-01-08 15:23:28

环形矩阵的相关文章

C++环形矩阵填充实现

#include<iostream> #include<iomanip> #include<cstdlib> #include<ctime> #include<cmath> #include<vector> #include<map> using namespace std; int main(void) { int n; while(cin >> n) { map<int, map<int , i

UVa 116 Unidirectional TSP(DP)

题意  一个n*m的环形矩阵(第一行和最后一行是相邻的)  从第一列任意位置出发  只能往右上,右,右下3个方向走  求走到第m列经过的的最小数字和 基础DP  横着的数塔问题 #include <bits/stdc++.h> #define l(x) d[x][j+1] using namespace std; const int N = 105; int n, m, g[N][N], d[N][N], fol[N][N]; int main() { int n, m, u, b, t, k

UVa 116 (多段图的最短路) Unidirectional TSP

题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多解时输出最小字典序的解. 分析: 这道题有点像数塔的变形,不同的是从三角形变成了矩形.依然是从最后一列往前递推.Next数组时用来记录路径的,first是最优解的第一列的行号.代码中将下一行的三个拓展出的行号排序来保证字典序最小. 1 #include <cstdio> 2 #include &l

UVA10827 - Maximum sum on a torus

题目链接 题意:给出一个环形矩阵,也就是第一行和最后一行是相连的,第一列和最后一列是相连的,求最大的子矩阵的和 思路:只要将矩阵复制四个,那么就可以按照求一个矩阵内最大子矩阵之和的做法去做,即枚举所有子矩阵的和,更新最大值.要注意在转换后的大矩阵,枚举的子矩阵规格是有范围的. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using name

计算机17-1,2作业D

D.环形矩阵 Description 给定一个整数m,按m形成一个环形矩阵.如m=5,则环形矩阵为: 1   1   1   1   1   1   1   1   1    1   2   2   2   2   2   2   2   1    1   2   3   3   3   3   3   2   1    1   2   3   4   4   4   3   2   1    1   2   3   4   5   4   3   2   1    1   2   3   4

100个经典C语言程序(益智类)

100个经典C语言程序(益智类) [1.绘制余弦曲线] 在屏幕上用"*"显示0~360度的余弦函数cos(x)曲线 [问题分析与算法设计] 利用cos(x)的左右对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就 应为62-m.程序中利用反余弦函数acos计算坐标(x,y)的对应关系. #include<st

环形打印矩阵

http://blog.csdn.net/xiaofei2010/article/details/7982456 #include <iostream> using namespace std; int main() { int a[10][10],count = 1; for (int k = 0,n = 10;k < n;n--,k++)// {//k表示第一行,n表示最后一行.4个FOR循环后,减两行,因此n--,k++ for (int i = k;i < n;i++) a

POJ 3150 Cellular Automaton(矩阵乘法+二分)

题目链接 题意 : 给出n个数形成环形,一次转化就是将每一个数前后的d个数字的和对m取余,然后作为这个数,问进行k次转化后,数组变成什么. 思路 :下述来自here 首先来看一下Sample里的第一组数据.1 2 2 1 2经过一次变换之后就成了5 5 5 5 4它的原理就是a0 a1 a2 a3 a4->(a4+a0+a1) (a0+a1+a2) (a1+a2+a3) (a2+a3+a4) (a3+a4+a0) 如果用矩阵相乘来描述,那就可以表述为1xN和NxN的矩阵相乘,结果仍为1xN矩阵a

SVG中 transform矩阵遇到的兼容性问题

SVG  transform矩阵遇到的兼容性问题.在chrome.safari.火狐.360极速浏览器上都正常显示的图,在手机端就不行啊!!! 先上图. 图1     PC端浏览器 图2   iPhone手机客户端 两者比较是不是感觉手机端的环形比很不正常.感觉手机端就跟后妈养得一样!!!说好的270度旋转效果呢,为啥出不来效果,为啥! 好了,接下去上简易版代码吧...就一个圆. 1 <!DOCTYPE html> 2 <html lang="en"> 3 &l