用C++实现顺时针增加的螺旋队列

<img src="data:image/png;base64,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" alt="" />
#include<iostream>
using namespace std;
int a[10][10];
void foo(int n)
{
	int m=1;
	int i,j;
	for(i=0;i<n/2;++i)
	{
		for(j=0;j<n-i;++j)
		{
			if(a[i][j]==0)
				a[i][j]=m++;
		}
		for(j=i+1;j<n-i;++j)
		{
			if(a[j][n-i-1]==0)
				a[j][n-i-1]=m++;
		}
		for(j=n-i-1;j>i;j--)
		{
			if(a[n-i-1][j]==0)
			{
				a[n-i-1][j]=m++;
			}
		}
		for(j=n-i-1;j>i;--j)
		{
			if(a[j][i]==0)
				a[j][i]=m++;
		}
	}

}
int main()
{
	for(int i=0;i<5;++i)
    {
		for(int j=0;j<5;++j)
			a[i][j]=0;

    }
	foo(5);
	for(int i=0;i<5;++i)
    {
		for(int j=0;j<5;++j)
			cout<<a[i][j]<<'\t';
		cout<<endl;
    }
    system("pause");
	return 0;
}

时间: 2024-10-20 07:52:34

用C++实现顺时针增加的螺旋队列的相关文章

螺旋队列顺时针方向 和逆时针方向的实现

这个博主找规律的部分写得很好,原样放在下面.最后给出了顺时针和逆时针方向的螺旋队列的实现,可以看出它们的差别如此之小. 和螺旋队列类似,也是找规律的zigzag数组见这个帖子. 螺旋队列的样子如下图: 两大规律: 1.螺旋规律 2.奇数(圈数,或X轴正坐标)平方规律(紫线) 问题描述: 设1的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0).编程实现输入任意一点坐标(x,y),输出所对应的数字! 问题解决: 从紫线突破. 从图中不难发现,每圈

螺旋队列问题

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 #define max(a,b) ((a)>(b) ? (a) : (b)) 5 #define abs(a) ((a)>0 ? (a) : (-a)) 6 int foo(int x, int y) 7 { 8 int t = max(abs(x),abs(y)); 9 int v; 10 int u = 2 * t -1; 11 u =

顺时针和逆时针螺旋打印二维数组(行列式)

一.要求: 行列式,行和宽不一定相等,要求顺时针螺旋打印每一个元素,所谓顺时针螺旋即: 第一圈:从第一行第一列元素开始,先从左到右打印第一行所有元素,接着打印最后一剩余列元素,再从右到左打印最后一行剩余元素,接着从下到上打印第一列剩余元素 第二圈:从第二行第二列开始,按上面的顺时针顺序打印一圈元素 ...,一圈圈反复,直到把所有元素无重复的打印完. 逆时针螺旋与上面的顺序刚好相反. 二.分析: 顺时针螺旋打印可以将问题分割为:先按顺时针打印第一圈,再按顺时针打印第二圈,其中每圈又分四个步骤:从左

螺旋队列

螺旋矩阵:要求输入(x,y),输出螺旋矩阵中相应的元素. int printfSpiralMatrix(int x,int y) { int Max = abs(x) > abs(y) ? abs(x) : abs(y); int Result; if (Max == x) // x 正半轴 { if (Max == -y) //会突变 Result = pow((Max * 2 + 1), 2); else Result = pow((Max * 2 - 1), 2) + Max + y; }

螺旋队列问题之二

如矩阵 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 找出规律,并打印出一个N*N的矩阵:规律就是从首坐标开始顺时针增大,所以 1.需要一个变量m来递增记录进度. 2.注意各个转折点. 具体代码实现如下: #include <stdio.h> #define N 5 int a[N][N]={0}; void fun(int n) { int i,j; int m=1; for(i=0;i<n/2;i+

螺旋队列和hiho1525逃离迷宫3

我是真调不出错误了! hiho1525逃离迷宫3 #include <stdio.h> #include <stdlib.h> #include <math.h> //中间变量为长整形,so x,y变量一定要设置为长整型 long long cal(long long x,long long y) { if (x<=y && y<=-x && x<=0) return (4*x*x-3*x+y)%26; else if

Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案

本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注.Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调生产者与消费者,从而避免使用锁和CAS,同时还组合使用预分配内存机制.缓存行机制(cache line).批处理效应(batch effect)来达到高吞吐量和低时延的目标.目前Disruptor版本已经迭代至3.0,本论文是基于Disruptor1.0写就,在新版本中,相对与1.0版本,其核心设计

消息队列最大数目

消息队列: 1.每次msgrcv一个消息,1.那个消息会在内核中移除 2.每次msgrcv都只会给一个消息出来,不管你rcv用多大的buf来接收,都是可以的.如果msgrcv的bufSize小于实际的该消息的大小,那么可以设置一个标志:表示截断. 如果不设置,那么会报错.取不出来. 2.消息满了,则默认0为阻塞,直到有了空间位置,才能snd消息进入到内核. 消息空了,则默认为0阻塞,直到有了一个消息位置,才能 rcv消息进入到进程内存. 3.如果指定msgflg:MSG_NOERROR,如果函数

【Java并发编程实战】—– AQS(四):CLH同步队列

在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁.入队列.释放锁等实现都与头尾节点相关.而且每一个节点都引入前驱节点和后兴许节点的引用:在等待机制上由原来的自旋改成堵塞唤醒. 其结构例如以下: 知道其结构了,我们再看看他的实现.在线程获取锁时会调用AQS的acquire()方法.该方法第一次尝试获取锁假设