题目:
给定一个整型矩阵matrix,请按照转圈的方式打印它。
例如:
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
要求:
额外空间复杂度O(1)。
源代码:
package 数组和矩阵问题;
import java.util.Scanner;
public class first {
//构造矩阵
public static void Creatematrix(int n) throws Exception{
int [][]array=new int[20][20];//用二位数组存储矩阵
int number=1;
if(n<=0||n>=20){//判断n的合法性
throw new Exception("参数错误!");
}
for(int i=0;i<n;i++)//初始化矩阵
{
for(int j=0;j<n;j++)
{
array[i][j]=number;
number++;
}
}
Printmatrix(array,n);
}
//打印初始矩阵
public static void Printmatrix(int a[][],int n){
System.out.println("初始化矩阵为:");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
int tR=0;
int tC=0;
int dR=n-1;
int dC=n-1;
System.out.println("循环打印:");
while(tR<=dR&&tC<=dC)
{
printEdge(a,tR++,tC++,dR--,dC--);
}
}
//转圈打印一个子矩阵的外层
public static void printEdge(int a[][],int tR,int tC,int dR,int dC){
if(tR==dR)//只有一行时
{
for(int i=tC;i<=dC;i++)
{
System.out.print(a[tR][i]+"\t");
}
}
else if(tC==dC)//只有一列时
{
for(int i=tR;i<=dR;i++)
{
System.out.print(a[i][tC]+"\n");
}
}
else//一般情况
{
int curR=tR;
int curC=tC;
while(curC!=dC)//上
{
System.out.println(a[tR][curC]+"\t");
curC++;
}
while(curR!=dR)//右
{
System.out.println(a[curR][dC]+"\t");
curR++;
}
while(curC!=tC)//下
{
System.out.println(a[dR][curC]+"\t");
curC--;
}
while(curR!=tR)//左
{
System.out.println(a[curR][tC]+"\t");
curR--;
}
}
}
public static void main(String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
int n;//矩阵行(列)数目
System.out.println("请输入矩阵的行(列)的数目(<20):");
n=scan.nextInt();//接收n的值
Creatematrix(n);//构造矩阵
}
}