【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)

 1 /*
 2 本程序说明:
 3
 4 输入:方阵大小n,输出:n*n的旋转方阵
 5
 6 举例:
 7     当n=2时,输出:
 8     1 2
 9     4 3
10     当n=4时,输出:
11     1 2 3 4
12     12 13 14 5
13     11 16 15 6
14     10 9 8 7
15
16 */
17 #include <iostream>
18 #include <vector>
19
20 using namespace std;
21
22 void PrintMatrixInCircle(vector<int>& numbers, int columns, int rows, int start,int& number)
23 {
24     int endX = columns - 1 - start;
25     int endY = rows - 1 - start;
26
27     // 从左到右打印一行
28     for(int i = start; i <= endX; ++i)
29     {
30         numbers[start*columns+i]=number++;
31     }
32
33     // 从上到下打印一列
34     if(start < endY)
35     {
36         for(int i = start + 1; i <= endY; ++i)
37         {
38             numbers[i*columns+endX]=number++;
39         }
40     }
41
42     // 从右到左打印一行
43     if(start < endX && start < endY)
44     {
45         for(int i = endX - 1; i >= start; --i)
46         {
47             numbers[endY*columns+i]=number++;
48         }
49     }
50
51     // 从下到上打印一行
52     if(start < endX && start < endY - 1)
53     {
54         for(int i = endY - 1; i >= start + 1; --i)
55         {
56             numbers[i*columns+start]=number++;
57         }
58     }
59 }
60
61 void PrintMatrixClockwisely(vector<int>& numbers, int columns, int rows,int& number)
62 {
63     int start = 0;
64
65     while(columns > start * 2 && rows > start * 2)
66     {
67         PrintMatrixInCircle(numbers, columns, rows, start, number);
68         ++start;
69     }
70 }
71
72
73 int main()
74 {
75     int n;
76     while(cin>>n)
77     {
78         int number=1;
79         vector<int> numbers(n*n,0);
80         PrintMatrixClockwisely(numbers, n, n, number);
81         for(int i=0;i<n*n;++i)
82         {
83             if(0==i%n &&i!=0)
84                 cout<<endl;
85             cout<<numbers[i]<<" ";
86         }
87         cout<<endl;
88     }
89     return 0;
90 }
时间: 2024-10-13 12:03:40

【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)的相关文章

【剑指offer】顺时针打印矩阵

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上测试通过. 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 输入: 输入可能包含多个测试样例,对于每个测试案例,

剑指OFFER之顺时针打印矩阵(九度OJ1391)

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列. 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1&l

剑指Offer:二叉树打印成多行【23】

剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class PrintByLevel { public static void main(String[] args) { TreeNode t1 = n

剑指offer得意之作——顺时针打印矩阵

题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 分析: 这题是牛客网剑指offer的第十九题.顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印.同样 只包含一列时,要判断从上向下打

【Java】 剑指offer(29) 顺时针打印矩阵

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归.每次打印矩阵的左上角的横纵坐标相同,即为start,而其余三个角的坐标都与行列数以及start有关,因此只需要for循环即可实现打印. 当然,其实只要针对start进行循环判断,start

《剑指offer》---顺时针打印矩阵

本文算法使用python3实现 1. 问题1 1.1 题目描述: ??输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. ??输入矩阵为 \[ \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 &a

[剑指Offer]29-顺时针打印矩阵-Java

题目链接 https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题意 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6

剑指OFFER之顺时针打印矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列. 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1&l

[剑指Offer] 65.矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如[a b c e s f c s a d e e]是3*4矩阵,其包含字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子. [思路

《剑指offer》矩阵中的路径

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵