文档库 最新最全的文档下载
当前位置:文档库 › c++螺旋矩阵算法

c++螺旋矩阵算法

// test2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

/*
螺旋矩阵

1 2 3 4 5

14 15 16 17 6

13 20 19 18 7

12 11 10 9 8


1,上右下左对应 1,2,3,4
2,先把基础的4*5写出来,然后在慢慢修改
3,主要是看有多少行,然后算出需要break的条件

add xl by 2016.4.25
*/

const int l = 1;
const int r = 1;

int _tmain(int argc, _TCHAR* argv[])
{
int i = 0,j = 0;
int ncount = 0;
int nstate = 1;
int narr[l][r];
int index = l / 2;
if( l % 2 != 0)
++ index;

int hh = 0; //标记下的下标(每次加一)
int hhh = 0; //标记左的下标(每次加一)
int rr = r; //标记上的最大下标(每次减一)
int ll = l; //标记右的最大下标(每次减一)

while(true)
{
if(nstate == 1)
{
narr[i][j ++ ] = ++ ncount;
if(j >= rr )
{
nstate = 2;
-- j;
i ++;
-- rr;
}
}
else if(nstate == 2)
{
narr[i ++ ][j] = ++ ncount;
if(i >= ll )
{
nstate = 3;
-- i;
-- j;
-- ll;
}
}
else if(nstate == 3)
{
narr[i][j -- ] = ++ ncount;
if(j < hh )
{
nstate = 4;
++ j;
-- i;
++ hh;
}
}
else if(nstate == 4)
{
narr[i -- ][j] = ++ ncount;
if(i <= hhh )
{
nstate = 1;
++ i;
++ j;
++ hhh;
//if( -- index <= 0)
//break;
}

}
if(ncount >= (l * r) )
break; //开启特殊条件判断,如1行,一列等
}


for(int i = 0 ; i < l ; i ++)
{
for( int j = 0 ; j < r ; j ++)
{
if(narr[i][j] < 100 )
printf(" ");
if(narr[i][j] < 10 )
printf(" ");
printf("%d,",narr[i][j]);
}
printf("\n");
}


printf("hello word !!!");
getchar();
return 0;
}


相关文档
相关文档 最新文档