iawen 发表于 2009-1-13 20:24

[交流]我实现的一个螺旋数组(C++源码)

上次的一个CrackMe就是用的这个螺旋数组,不过没有在比较时进行处理!
而且参与的字符也比较少,只是4*4的一个规则数组,一步步跟还是容易的,呵呵!
大家有兴趣,可以自己动手实现一个,用更多的字符来实现,在比较前,再进行一定的处理!

下面是源码,:
/*
文件名:HelixArray.cpp
螺旋数组
作者:iawen
*/

#include<iostream>
using namespace std;

int main()
{
        int nR,nC;
        cout<<"请输入螺旋数组的维数(2维:行--列):";
        cin>>nR>>nC;
        cout<<"螺旋数组如下:\n";
       
        int *nArray=new int;
        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<colEnd;col++){
                                *(nArray+(row*nC)+col)=n;
                                n++;
                        }
                        nFlag=2;
                        i++;       
                }
                if(n>nR*nC)
                        break;
               
                if(nFlag==2){
                        col--;
                        for(row=i;row<rowEnd;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;i<nR;i++){
                for(j=0;j<nC;j++){
                        cout.width(3);
                        cout<<*(nArray+(i*nC)+j)<<"";
                }
                cout<<endl;
        }
       
        delete [] nArray;
        return 0;
}
运行效果如图:

附件为编译好的控制台程序:

[ 本帖最后由 chenguo 于 2009-1-14 10:17 编辑 ]

zzage 发表于 2009-1-14 09:48

太过强大了..看得有点晕..
抢沙发,然后膜拜下老鸦

mycsy 发表于 2009-1-14 10:24

强悍…… 至今这种排序算法也实现不了几个

ohyeah521 发表于 2009-1-15 21:42

顶你:handshake
页: [1]
查看完整版本: [交流]我实现的一个螺旋数组(C++源码)