回型矩阵的C++实现
来源:互联网 发布:淘宝店铺如何提升销量 编辑:程序博客网 时间:2024/05/19 15:43
这个问题还是前一阵子面试的时候遇到的,就是给你一个数字N,建立一个N×N的矩阵,元素有外层向内层递增,也就是:
1 2 3
8 9 4
7 6 5
这样的矩阵;当时做了一个多小时也没有弄出来,其实本来是一个很简单的东西,可能当时实在是脑子有些累了,因为面试要做一些笔试,还得应付考官的问题,实在是没有精力再去考虑那个算法,后来回来后我从网上也没有看到很好的算法,没办法,就自己憋吧,其实核心算法并不麻烦,仅仅是设置几个关键位置的标志,主要是思路清晰点就好了,后来我也没做出来,就放到那里了,昨天晚上突然心血来潮,决定把他搞出来,终于,搞定了,于是拿出来跟大家分享下,大家有什么好的算法也可要不吝赐教。。。。
#include<iostream>
using namespace std;
bool CreateMetrix(int *pMetrix,int n)
{
int i = 0, //数据元素
j = 0, //列号
k = 0;//行号
int iUp = 0,//上边界
iDown = n,//下边界
iLeft = 0,//左边界
iRight = n;//右边界
bool bRight = true,//左右填充方向
bDown = true;//上下填充方向
if (NULL == pMetrix)
{
return false;
}
memset(pMetrix,0,sizeof(int) * n*n);
//开始填充
for (i = 1; i <= n*n; i++)
{
//首先向右填充
if (bRight)
{
if (j < iRight)//还没有到达右边界
{
*(pMetrix + n * k + j) = i;
j++;
}
else
{
k++;//列号不变,增加行号,因为上面已经填充了对应行的列元素,故先将行号增加
if (k < iDown)//还没有到最底端
{
*(pMetrix + n * k + (j - 1)) = i;//此处的j是目前列号加1,因为上面的判断条件所致
}
else
{
iRight--;//右边界列号减1
iDown--;//下边界行号减1
k--;//行号减1
j--;//列号减1
bRight = false;//已经走完一个折线,接下来是向左填充了
}
}
}
if (!bRight)//向左填充
{
if (j > iLeft)//如果还没有到达左边界
{
j--;//在前面已经把第k行第j列元素填充了
*(pMetrix + n * k + j) = i;
}
else
{
k--;//第k行元素已经填充
if (k > iUp)//还没有到达最顶部
{
*(pMetrix + n * k + j) = i;
}
else
{
iLeft++;//左边界加1
iUp++;//上边界加1
k++;//k已经减过头了
j++;//j也见过头了
i--;//这时候这个数据没有被填充,所以回退一个
bRight = true;//下面又要向右填充了
}
}
}
}
return true;
}
void OutPutMetrix(int *Src, int n)
{
int t = 0;
for (int i = 0; i < n; i ++)
{
for (int j = 0; j < n; j++)
{
t = *(Src + n*i + j);
cout << "/t" << t;
}
cout << endl;
}
}
int main()
{
int *p = NULL;
int n = 2;
cout <<"输入矩阵的维度:" << endl;
cin >> n;
if (n > 0)
{
p = new int[n*n];
}else
{
cout << "输入数字有误!/n本程序不能处理,再见!" << endl;
return 0;
}
if (CreateMetrix(p,n))
{
OutPutMetrix(p, n);
}
else
{
cout << "处理中出现错误,很抱歉。。。" << endl;
}
delete p;
return 1;
}
函数直接就可以用,只要传递一个矩阵的指针和维度就ok了
- 螺旋矩阵的C实现
- 蛇形矩阵的实现(C++)
- 矩阵的基本运算 ------ C 实现
- C/C++实现矩阵的转置
- C语言 矩阵的相乘实现
- 矩阵求逆的C语言实现
- C数组实现矩阵的转置
- 矩阵的基本运算(C实现)
- 矩阵乘法的C语言实现
- C数组实现矩阵的转置
- 矩阵相乘的C代码实现
- C语言实现矩阵的转置
- C语言实现矩阵的四则运算
- 回型矩阵的C++实现
- 打印回形矩阵(C实现)
- 螺旋矩阵(c实现)
- 递归法解决回式蛇形矩阵的输出(C语言的实现)
- 矩阵,Z形矩阵,S形矩阵,回形矩阵的java实现
- PIC
- asp.net面试题收集(附答案)
- 收集的C#和Word操作的一些代码(本人未经测试)
- 在VS2003中编写控制台程序的方法,以及自动缩进快捷键: CTRL+K+F
- io端口,pci配置寄存器,CMOS,SMBIOS读写工具
- 回型矩阵的C++实现
- IE8打开需要安装加载项的网页时出现内存错误!
- [转载]25条CSS制作网页编写的提醒及小技巧整理
- SOA是什么
- dynamic_cast与polymorphic_cast再比较
- XML for Analysis(XMLA)开发详解-(5)XMLA请求的格式及实例示意
- ASP.NET程序中常用的三十三种代码 (转)
- 变量的包装
- 关于Albatross web framework