蛇形矩阵:对上一种方法的改进
2009-12-29 20:07
253 查看
所关注的地方:每一个斜行第一个被填入的下标(x,y)和相应数字
下面是对上一种处理方法的改进,不需要每次都去找对应的下标和数字,
而是事先都找出来。
貌似用的是动态规划?请高手指点。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
void print_snake2(int n)
{
int m = 2*(n-1);
int *v = new int[m]; //保存每一个斜行第一个被填写的数字
int *posX = new int[m]; //保存每一个斜行第一个被填写下标的X值
int *posY = new int[m]; //保存每一个斜行第一个被填写下标的Y值
v[0] = 1;
posX[0]=0;
posY[0]=0;
//根据前一斜行计算下一斜行对应的v,posX值
for(int i = 1; i <n;i++)
{
v[i] = v[i-1]+((i-1)<=(n-1)?(i):((n<<1)-i));
if(i&1){posX[i]=posY[i-1]+1;posY[i]=posX[i-1];}
else {posX[i]=posY[(i)-1];posY[i]=posX[i-1]+1;}
}
//根据前一斜行计算下一斜行对应的v,posX值
for(int i=n; i<=m;i++)
{
v[i] = v[i-1]+((i-1)<=(n-1)?(i):((n<<1)-i));
if(posX[i-1]>posY[i-1])
{
posX[i]=posY[i-1]+1;
posY[i]=posX[i-1];
}
else
{
posX[i]=posY[i-1];
posY[i]=posX[i-1]+1;
}
}
//打印矩阵
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%4d ",v[i+j] + abs(i-posX[i+j]));
}
printf("/n");
}
}
void main()
{
int n = 0;
while(true)
{
scanf("%d",&n);
if(n<=0)break;
//getchar();
print_snake2(n);
}
getchar();
}
下面是对上一种处理方法的改进,不需要每次都去找对应的下标和数字,
而是事先都找出来。
貌似用的是动态规划?请高手指点。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
void print_snake2(int n)
{
int m = 2*(n-1);
int *v = new int[m]; //保存每一个斜行第一个被填写的数字
int *posX = new int[m]; //保存每一个斜行第一个被填写下标的X值
int *posY = new int[m]; //保存每一个斜行第一个被填写下标的Y值
v[0] = 1;
posX[0]=0;
posY[0]=0;
//根据前一斜行计算下一斜行对应的v,posX值
for(int i = 1; i <n;i++)
{
v[i] = v[i-1]+((i-1)<=(n-1)?(i):((n<<1)-i));
if(i&1){posX[i]=posY[i-1]+1;posY[i]=posX[i-1];}
else {posX[i]=posY[(i)-1];posY[i]=posX[i-1]+1;}
}
//根据前一斜行计算下一斜行对应的v,posX值
for(int i=n; i<=m;i++)
{
v[i] = v[i-1]+((i-1)<=(n-1)?(i):((n<<1)-i));
if(posX[i-1]>posY[i-1])
{
posX[i]=posY[i-1]+1;
posY[i]=posX[i-1];
}
else
{
posX[i]=posY[i-1];
posY[i]=posX[i-1]+1;
}
}
//打印矩阵
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%4d ",v[i+j] + abs(i-posX[i+j]));
}
printf("/n");
}
}
void main()
{
int n = 0;
while(true)
{
scanf("%d",&n);
if(n<=0)break;
//getchar();
print_snake2(n);
}
getchar();
}
相关文章推荐
- 基于哈希表构建高效 矩阵存储结构--矩阵的一种存储方法 哈希矩阵。
- 敏捷用例:一种适合敏捷开发的改进用例方法
- 基于Qt有限状态机人工智能的一种实现及改进方法
- 一种改进的基于亚像素边缘的齿轮内径计算方法
- java蛇形矩阵输出方法(顺时针、逆时针)
- 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:协同过滤(collaborative filtering )改进
- C中实现矩阵乘法的一种高效的方法
- 小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法
- 基于一种改进的提取形状特征向量方法,实现图像检索
- 一种改进哈希冲突的方法
- PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
- 一种打印螺旋式矩阵的方法
- [摘录] 一种改进的边界检测的方法
- 一种基于Md5算法的改进加密方法
- C#窗体控件大小随窗体变化而变化的一种改进方法
- uC/OS-II任务栈处理的一种改进方法
- uC/OS-II任务栈处理的一种改进方法
- 一种基于Md5算法的改进加密方法
- 一种基于RBAC模型的动态访问控制改进方法
- C中实现矩阵乘法的一种高效的方法