栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

分治法--数字旋转方阵(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分治法--数字旋转方阵(C++)

文章目录
  • 前言
  • 一、分治法
  • 二、数字旋转方阵源码(C++)
  • 三、动态分配数组
  • 四、二维数组作为函数参数传递
  • 总结


前言 分治法--数字旋转方阵
涉及的知识点由分治法、数组动态分配和二维数组做参传递。

一、分治法

分治法将一个难以直接解决的大问题分解为一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解。主要分为三步,即划分,求解子问题,合并。划分的时候主要基于平衡子问题,且最好相互独立。
这里我们以数字旋转方阵为例,具体过程详见源码。

二、数字旋转方阵源码(C++)
//数字旋转方阵
#include 
using namespace std;

void Full(int number,int begin,int size,int **d)
{
	int i, j, k;
	//递归边界,如果size==0,则无需填写。
	if (size == 0)
	{
		return;
	}
	//递归边界,如果size==1,则只需填写number进去即可。
	if (size == 1)
	{
		d[begin][begin] = number;
		return;
	}
	//初始化左上角坐标。
	i = begin;j = begin;
	//填写A区域,填写size-1次。
	for (k = 0; k < size - 1; k++)
	{
		d[i][j] = number;
		number++;
		i++;
	}
	//填写B区域,填写size-1次。
	for (k = 0; k < size - 1; k++)
	{
		d[i][j] = number;
		number++;
		j++;
	}
	//填写C区域,填写size-1次。
	for (k = 0; k < size - 1; k++)
	{
		d[i][j] = number;
		number++;
		i--;
	}
	//填写D区域,填写size-1次。
	for (k = 0; k < size - 1; k++)
	{
		d[i][j] = number;
		number++;
		j--;
	}
	Full(number, begin + 1, size - 2, d);

}

int main()
{
	//确认方阵阶数。
	int number = 1, begin = 0, size;
	cout << "请输入方阵的阶数:";
	cin >> size;
	//动态分配数组,二阶数组。
	int** d = new int*[size];
	for (int i = 0; i < size; i++)
	{
		d[i] = new int[size];
	}
	//二阶数组赋值
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			d[i][j] = 0;
		}
	}
	//调用数字旋转方阵。
	Full(number, begin, size,d);
	//输出数字旋转方阵
	cout << "数字旋转方阵:" << endl;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout< 

结果:

三、动态分配数组

一维数组

void oneDimensionalArray()
{
    //定义一个长度为10的数组
	int* array = new int[10];
    //赋值
	for(int i = 0; i < 10; i++)
	{
		array[i] = i*2;
	}
	//输出
	for(int i = 0; i < 10; i++)
	{
		cout << i << " : " << array[i] << endl;
	}
	//释放内存
	delete[] array;
}

二维数组

void twoDimensionalArray()
{
	//定义一个2*10的二维数组
	int** array = new int*[2];
	for(int i = 0; i < 2; i++)
	{
		array[i] = new int[10];
	}
	//赋值
	for(int i = 0; i < 2; i++)
	{
		for(int j = 0; j < 10; j++)
		{
			array[i][j] = i*10 + j;
		}
	}
	//输出
	for(int i = 0; i < 2; i++)
	{
		for(int j = 0; j < 10; j++)
		{
			cout << "(" << i << ", " << j << ")" << array[i][j] << endl;
		}
	}
	//释放内存
	for(int i = 0; i < 2; i++)
	{
		delete[] array[i];
	}
	
	delete[] array;
}

以此类推

四、二维数组作为函数参数传递

我在上面的示例采用二级指针作为函数参数来传递,具体讲解详见

https://blog.csdn.net/kangxidagege/article/details/79475537

最近不是很有空整理书写,希望后面有时间自己能够回来填坑。

总结

总要写些什么去记录与分享,希望对你能够有帮助,而这就是我最大的开心与庆幸。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/655941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号