Java第三次作业数字旋转方阵--分治算法

import java.util.Scanner;
public class Test3_6_zxj
{

public static void main(String[] args) 
{
	// TODO Auto-generated method stub

/输入一个自然数N(2<N<9),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入样例】
4
【输出样例】输出内容为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
/
//分治算法————递归调用
System.out.print(“请输入n的值:”);
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int array[][];
array=new int [n][n];
Test3_6_zxj drm = new Test3_6_zxj();
drm.Digitalrotationmatrix(1,0,n,array);
drm.display(n,array);
sc.close();//释放sc所占用的空间,如不加这句话,会有警告,但不影响程序

}
public void Digitalrotationmatrix(int num,int begin,int n,int [][]array)
{
	if(n<0)//输入的n为奇数时最终停止递归调用
	{
		return;
	}
	if(n==0)////输入的n为偶数时最终停止递归调用
	{
		return;//必须加,不加会造成栈溢出,无限循环
	}
	if(n==1)//输入的n为奇数时填最中间的数字
	{
		array[begin][begin]=num;
	}
	//开始分块
	//区域A
	int i=begin;
	int j=begin;
	for(int k=0;k<n-1;k++)
	{
		array[i][j]=num;
		num++;
		j++;
	}
	//区域B
	for(int k=0;k<n-1;k++)
	{
		array[i][j]=num;
		num++;
		i++;
	}
	//区域C
	for(int k=0;k<n-1;k++)
	{
		array[i][j]=num;
		num++;
		j--;
	}
	//区域D
	for(int k=0;k<n-1;k++)
	{
		array[i][j]=num;
		num++;
		i--;
	}
	Digitalrotationmatrix(num,begin+1,n-2,array);//每调用一次,完成一圈,begin+1进入内层圈;完成一圈,掐头去尾,n-2
}
public void display(int n,int array [][])//输出
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			System.out.printf(array[i][j]+"\t");//wdnmd太歪了,制表符牛逼
			if(j==n-1)
			{
				System.out.println("");
			}
		}
	}
}

}

发布了20 篇原创文章 · 获赞 1 · 访问量 219

猜你喜欢

转载自blog.csdn.net/weixin_45491054/article/details/104888176