⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spiral matrix1.txt

📁 螺旋矩阵算法编程
💻 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 + -