螺旋队列 算法与代码
来源:互联网 发布:打鱼软件开发购买 编辑:程序博客网 时间:2024/05/16 07:30
【问题描述】:螺旋队列;实现输入坐标(x , y)输出数值。
【算法分析】:
队列数值范围:
第1圈2~9
第2圈10~25
第3圈26~49
第t圈(2t-1)^2+1 ~ (2t+1)^2
东边:
最小值为(2t-1)^2+1,最小值所在的坐标为(t,1-t)。
除第一个值(最大值)外,
该列数值值为: [(2t-1)^2+1] + [y-(1-t)] = (2t-1)^2+t+y
南边:
每边数值个数为2t+1,
该边最小值为:[(2t-1)^2+1]+(2t+1-2)
该边数值值为:[(2t-1)^2+1]+(2t+1-2)+t-x = (2t-1)^2+3t-x
西边:
该列最小值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)
该列数值值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)+t-y = (2t-1)^2+5t-y
北边:
该边最小值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)*2
该边数值值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)*2+t+x = (2t-1)^2+7t+x
【代码】:
#include <stdio.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
int foo(int x,int y)
{
int t;
int v;
t= max(x,y);
if(x==t && y!= -t) //东
v = sqrt(2t-1)+t+y
if(y==t) //南
v = sqrt(2t-1)+3t-x
if(x==-t) //西
v = sqrt(2t-1)+5t-y
if(y==-t) //北
v = sqrt(2t-1)+7t+x
return v;
}
int main
{
int x,y;
int v;
scanf("%d,%d",&x,&y);
v = foo(x,y);
printf("%d (%d, %d)",v,x,y);
return 0;
}
- 螺旋队列 算法与代码
- 算法--螺旋队列代码实现
- 螺旋矩阵、螺旋队列算法
- 螺旋队列C++代码
- 【算法】螺旋队列
- 螺旋队列算法(YC)
- 螺旋队列算法分析
- 螺旋队列算法详解
- 螺旋队列-算法设计
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列---算法分析
- 螺旋队列算法分析
- IT之路, 何去何从.
- Http数据压缩
- 引用POOM函数后 链接错误
- 转载:大型网站架构分析系列技术文档合集
- 啊欧帮忙弄懂的汇编
- 螺旋队列 算法与代码
- gentoo && sabayon
- 4.29留1
- Webzip 太强大了
- 4.29留2
- SVN和Apache在Win2003安装配置,及SVN常用命令
- 4.29留3
- linux c 正则表达式
- COOKIE无效的原因