要求如下:
给定一个2维数组Array[row][col],让其呈螺纹状排列。
如:
数组:Array[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
让其重新排序如下:
E:\Programming\c_cpp>HelixArray
请输入螺旋数组的维数(2维:行--列):4 4
螺旋数组如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
图示如下:
以前曾经实现过,后来电脑被偷了(郁闷,整个家都被洗劫一空),代码也没有了,今天想起,只好重新实现了。
花了偶一上午时间,写了出来,呵呵…………^#^……
代码如下:
/*
文件名:HelixArray.cpp
螺旋数组
作者:iawen
*/
#include
using namespace std;
int main()
{
int nR,nC;
cout<<"请输入螺旋数组的维数(2维:行--列):";
cin>>nR>>nC;
cout<<"螺旋数组如下:\n";
int *nArray=new int[nR*nC];
int n=1;
int i=0,j=0;
int rowEnd=nR; //避免修改
int colEnd=nC; //避免修改
int nFlag=1; //指定赋值方向:1向右 2向下 3向左 4向上
while(1){
int row=i;
int col=j;
if(nFlag==1){
for(col=j;col*(nArray+(row*nC)+col)=n;
n++;
}
nFlag=2;
i++;
}
if(n>nR*nC)
break;
if(nFlag==2){
col--;
for(row=i;row*(nArray+(row*nC)+col)=n;
n++;
}
nFlag=3;
colEnd--;
}
if(n>nR*nC)
break;
if(colEnd<=1)
break;
if(nFlag==3){
row--;
for(col=colEnd-1;col>=j;col--){
*(nArray+(row*nC)+col)=n;
n++;
}
nFlag=4;
rowEnd--;
}
if(n>nR*nC)
break;
if(rowEnd<=1)
break;
if(nFlag==4){
col++;
for(row=rowEnd-1;row>=i;row--){
*(nArray+(row*nC)+col)=n;
n++;
}
nFlag=1;
j++;
}
if(n>nR*nC)
break;
}
//输出显示数组
for(i=0;ifor(j=0;j cout<<*(nArray+(i*nC)+j)<<"\t";
cout<}
delete [] nArray;
return 0;
}