JAVA实现【螺旋矩阵】输出的新思路

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。JAVA实现【螺旋矩阵】输出的新思路,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

笔试遇到了一个题目,如何对所输入的n,实现一个螺旋输出的n*n矩阵,当时没想好,回来以后想了一个和大部分答案不大一样的新办法,大家可以看看

代码如下

public class pc {
	public static void main(String[] args) {
		//输入矩阵规模
		int n=new Scanner(System.in).nextInt();
		int[][] A=computeCycle(n, 1);//逐层计算
		int[][]temp=null;
		int m=n;
		int initial=A[1][0]+1;
		if(n%2==0) {//偶数规模
			while(m>2) {//递归合并
				temp=computeCycle(m-2, initial);
				A=connect2mat(A, temp, m-2, n);
				m-=2;
				initial=temp[1][0]+1;
			}
		}else {//奇数规模
			while(m>3) {
				temp=computeCycle(m-2, initial);
				A=connect2mat(A, temp, m-2, n);
				m-=2;
				initial=temp[1][0]+1;
			}
			A[n/2][n/2]=n*n;
		}
		for(int x=0;x!=n;++x) {
			for(int y=0;y!=n;++y) {		
				System.out.print(A[x][y]+"\t");
			}
			System.out.println();
		}
	}


	public static int[][] computeCycle(int n,int initial) {
		int[][] A=new int[n][n];
		if(n==1) {
			A[0][0]=initial;
		}else {
			/*       核心算法         */
			//第一层-上
			for(int x=0;x!=n;++x) {
				A[0][x]=x+initial;
			}
			//第一层-右
			for(int x=1;x!=n;++x) {
				A[x][n-1]=x+A[0][n-1];
			}
			//第一层-下
			int i=1;
			for(int x=n-2;x!=-1;--x) {
				A[n-1][x]=A[n-1][n-1]+i++;
			}
			//第一层-左
			int j=1;
			for(int x=n-2;x!=0;--x) {
				A[x][0]=A[n-1][0]+j++;
			}
		}
		return A;
	}
	public static int[][] connect2mat(int[][]A,int[][]B,int n,int m) {
		int temp=(m-n)/2;
		for(int a=0;a!=n;++a) {
			for(int b=0;b!=n;++b) {
				A[a+temp][b+temp]=B[a][b];
			}
		}
		return A;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153562.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!