📄 spiral matrix1.txt
字号:
#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;
}
发表于 @ 2004年12月28日 00:05:00|评论(1)|编辑
新一篇: [ZT]用cvsup同步源代码并更新系统 | 旧一篇: 超大数乘法程序评论
#avalon 发表于2004-12-28 11:09:00 IP: 220.180.194.*
#include <stdio.h>
#define N 4
void main()
{
int i=0,j,n=1,s=0,e=N,it,p[N][N];
for(;i<(N+1)/2;++i){
for(it=s; it<e;)p[it++][s]=n++;
for(it=++s;it<e;)p[e-1][it++]=n++;
for(it=(--e)-1;it>=s-1;)p[it--][e]=n++;
for(it=e-1;it>=s;)p[s-1][it--]=n++;
}
for(i=0;i<N;++i){
for(j=0;j<N;++j)printf("%4d",p[i][j]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -