逆时针顺序的螺旋矩阵打印
2004-12-28 00:05
246 查看
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/*
1 8 7
2 9 6
3 4 5
输出如图所示的矩正,第一个是3*3的,后面的4*4的,
算法就是随便输入一个N,就可以输出一个N*N的矩正???
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7 */
void MatrixProcess( int ** Matrix,int N )
{
int number=1;
int start=0,end=N,i;
assert( N > 1 );
assert( Matrix != NULL );
for(i=0; i < N/2+1; ++i)
{
int iter=0;
for( iter=start; iter<end; ++iter )
if( Matrix[iter][start] == 0 )
Matrix[iter][start] = number++;
for( iter= ++start; iter<end; ++iter )
if( Matrix[end-1][iter] == 0 )
Matrix[end-1][iter] = number++;
for( iter= --end; iter>=start-1; --iter )
if( Matrix[iter][end] == 0 )
Matrix[iter][end] = number++;
for( iter= end; iter>=start; --iter )
if( Matrix[start-1][iter] == 0 )
Matrix[start-1][iter] = number++;
}
}
int ** MatrixMemAlloc( int N )
{
/* N为阶数,分配N*N的二维空间,清零 */
int ** mem;
int i,j;
assert( N > 1 );
mem = (int **) malloc ( (sizeof(int *)) * N );
assert(mem != NULL);
for(i=0; i<N; ++i)
{
mem[i] = (int *) malloc ( (sizeof(int)) * N );
assert( mem[i] != NULL );
}
for(i=0; i< N; ++i)
for(j=0; j<N; ++j)
mem[i][j]=0; /* 清零 */
return mem;
}
/**/
void MatrixPrint(int ** Matrix,int N)
{
/**/
int i,j;
assert( N>1 );
assert( Matrix != NULL );
for(i=0;i<N;++i)
assert( Matrix[i] != NULL );
for(i=0;i<N;++i)
{
for(j=0;j<N;++j)
printf("%3d",Matrix[i][j]);
printf("/n");
}
return;
}
/**/
int main()
{
int N,** point;
printf("input N:");
scanf("%d",&N);
point = MatrixMemAlloc( N );
MatrixProcess( point,N );
MatrixPrint( point, N );
system("PAUSE");
return 0;
}
#include <stdlib.h>
#include <assert.h>
/*
1 8 7
2 9 6
3 4 5
输出如图所示的矩正,第一个是3*3的,后面的4*4的,
算法就是随便输入一个N,就可以输出一个N*N的矩正???
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7 */
void MatrixProcess( int ** Matrix,int N )
{
int number=1;
int start=0,end=N,i;
assert( N > 1 );
assert( Matrix != NULL );
for(i=0; i < N/2+1; ++i)
{
int iter=0;
for( iter=start; iter<end; ++iter )
if( Matrix[iter][start] == 0 )
Matrix[iter][start] = number++;
for( iter= ++start; iter<end; ++iter )
if( Matrix[end-1][iter] == 0 )
Matrix[end-1][iter] = number++;
for( iter= --end; iter>=start-1; --iter )
if( Matrix[iter][end] == 0 )
Matrix[iter][end] = number++;
for( iter= end; iter>=start; --iter )
if( Matrix[start-1][iter] == 0 )
Matrix[start-1][iter] = number++;
}
}
int ** MatrixMemAlloc( int N )
{
/* N为阶数,分配N*N的二维空间,清零 */
int ** mem;
int i,j;
assert( N > 1 );
mem = (int **) malloc ( (sizeof(int *)) * N );
assert(mem != NULL);
for(i=0; i<N; ++i)
{
mem[i] = (int *) malloc ( (sizeof(int)) * N );
assert( mem[i] != NULL );
}
for(i=0; i< N; ++i)
for(j=0; j<N; ++j)
mem[i][j]=0; /* 清零 */
return mem;
}
/**/
void MatrixPrint(int ** Matrix,int N)
{
/**/
int i,j;
assert( N>1 );
assert( Matrix != NULL );
for(i=0;i<N;++i)
assert( Matrix[i] != NULL );
for(i=0;i<N;++i)
{
for(j=0;j<N;++j)
printf("%3d",Matrix[i][j]);
printf("/n");
}
return;
}
/**/
int main()
{
int N,** point;
printf("input N:");
scanf("%d",&N);
point = MatrixMemAlloc( N );
MatrixProcess( point,N );
MatrixPrint( point, N );
system("PAUSE");
return 0;
}
相关文章推荐
- 矩阵螺旋输出打印原代码
- 逆时针打印矩阵
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
- 打印螺旋矩阵
- 【 Algorithm】顺序打印矩阵——美团四面
- 剑指offer 编程题(18):顺序打印矩阵
- 剑指offer面试题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 笔试题&面试题:输入一个维度,逆时针打印出一个指定的矩阵
- java逆时针螺旋输出矩阵
- 1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵(递归)
- N×N矩阵螺旋打印输出
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8
- 顺时针和逆时针螺旋打印二维数组(行列式)
- 螺旋矩阵 有内及外 逆时针
- 打印螺旋矩阵
- Java编程实现打印螺旋矩阵实例代码
- C++输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
- 每天一道LeetCode-----将m × n矩阵按照顺时针螺旋顺序转化成一维数组
- 编程题之--打印二维螺旋矩阵
- 【二叉树】按逆时针顺序打印树的外层节点