文件名称:用c编写的N*N的螺旋矩阵源代码

  • 所属分类:
  • 其他小程序
  • 资源属性:
  • [Text]
  • 上传时间:
  • 2008-05-05
  • 文件大小:
  • 4.29kb
  • 下载次数:
  • 0次
  • 提 供 者:
  • good@588
  • 相关连接:
  • 下载说明:
  • 别用迅雷下载,失败请重下,重下不扣分!

介绍说明--下载内容均来自于网络,请自行研究使用

/*

实现效果:

1 2 6 7 15

3 5 8 14 16

4 9 13 17 22

10 12 18 21 23

11 19 20 24 25

*/

#include <stdio.h>

#define N 5 //阶数,即N*N的螺旋矩阵


void main()

{

    int i, j, num=1, a[N][N];

    for(i=0; i<=N/2; i++)

    {

        for(j=i; j<N-i; j++) a[i][j]=n++;

        for(j=i+1; j<N-i; j++) a[j][N-i-1]=n++;

        for(j=N-i-2; j>i; j--) a[N-i-1][j]=n++;

        for(j=N-i-1; j>i; j--) a[j][i]=n++;

    }

    for(i=0; i<N; i++)

    {

        for(j=0; j<N; j++)

            printf("%2d ",a[i][j]);

        printf("\n");

    }

}

    


 


不知道叫什么,先叫它“回宫图”吧

年初的时候在贴吧瞎逛,看到了一个程序挺有意思,会输出如下的形状:

01 24 23 22 21 20 19

02 25 40 39 38 37 18

03 26 41 48 47 36 17

04 27 42 49 46 35 16

05 28 43 44 45 34 15

06 29 30 31 32 33 14

07 08 09 10 11 12 13

仔细看这个形状,数字是按顺序往里回旋的,觉得很有创意,可是一看源代码头就大了,

每个编程人都知道看别人的代码是很困难的,尤其像这种不知道思路的,所以也就放下

没管了。

昨天上物理课实在是没心思听,就想起这个程序,想了一节课,果然不负有心人,给弄出来了,这个是增强版的,可以输入1-10中的任意个数,然后生成图形。

先看代码,没有注释,所以不好看的懂。

#include<stdio.h>

main()

{

       int n,m,i,j,t,k=1;

       int a[11][11];

       clrscr();

       do{

       printf("please input a number(1-10):");

       scanf("%d",&n);

       }while(n<1||n>10);

       t=n+1;

       for(m=1;m<=t/2;m++)

         {

           for(i=m;i<=t-m;i++)

             {a[i][m]=k;k++;}

           for(j=m+1;j<=t-m;j++)

             {a[i-1][j]=k;k++;}

           for(i=n-m;i>=m;i--)

             {a[i][j-1]=k;k++;}

           for(j=n-m;j>=m+1;j--)

             {a[i+1][j]=k;k++;}

         }

       for(i=1;i<=n;i++)

         {

           for(j=1;j<=n;j++)

             {

               if(a[i][j]<=9) printf("0%d ",a[i][j]);

               else printf("%d ",a[i][j]);       }

           printf("\n");

         }

       getch();

}

就是这样的。




可以更简洁些:


#include<stdio.h>

main()

{

       int n,m,i,j,t,k=1;

       int a[11][11];

       clrscr();

       do{

       printf("please input a number(1-10):");

       scanf("%d",&n);

       }while(n<1||n>10);

       t=n+1;

       for(m=1;m<=t/2;m++)

         {

           for(i=m;i<=t-m;i++)

             a[i][m]=k++;

           for(j=m+1;j<=t-m;j++)

             a[i-1][j]=k++;

           for(i=n-m;i>=m;i--)

             a[i][j-1]=k++;

           for(j=n-m;j>=m+1;j--)

             a[i+1][j]=k++;

         }

       for(i=1;i<=n;i++)

         {

           for(j=1;j<=n;j++)

             {

               if(a[i][j]<=9) printf("0%d ",a[i][j]);

               else printf("%d ",a[i][j]);       }

           printf("\n");

         }

       getch();

}


 




 #include <stdio.h>

#define N 8

main(){

 int i,j,n=1,a[N][N];

 for(i=0;i<=N/2;i++){

  for(j=i;j<N-i;j++)

   a[i][j]=n++;

  for(j=i+1;j<N-i;j++)

   a[j][N-i-1]=n++;

  for(j=N-i-2;j>i;j--)

   a[N-i-1][j]=n++;

  for(j=N-i-1;j>i;j--)

   a[j][i]=n++;

 }

 for(i=0;i<N;i++){

  printf("\n\n");

  for(j=0;j<N;j++)

   printf("%5d",a[i][j]);

 }

}

 


 




                                马踏棋盘问题




#include <stdio.h>

#define N 5

void main(){

 int x,y;

 void horse(int i,int j);

 printf("Please input start position:");

 scanf("%d%d",&x,&y);

 horse(x-1,y-1);

}

void horse(int i,int j){

 int a[N][N]={0},start=0,

  h[]={1,2,2,1,-1,-2,-2,-1},

  v[]={2,1,-1,-2,2,1,-1,-2},

  save[N*N]={0},posnum=0,ti,tj,count=0;

 int jump(int i,int j,int a[N][N]);

 void outplan(int a[N][N]);

 a[i][j]=posnum+1;

 while(posnum>=0){

  ti=i;tj=j;

  for(start=save[posnum];start<8;++start){

   ti+=h[start];tj+=v[start];

   if(jump(ti,tj,a))

    break;

   ti-=h[start];tj-=v[start];

  }

  if(start<8){

   save[posnum]=start;

   a[ti][tj]=++posnum+1;

   i=ti;j=tj;save[posnum]=0;

   if(posnum==N*N-1){

    //outplan(a);

    count++;

   }

  }

  else{

   a[i][j]=0;

   posnum--;

   i-=h[save[posnum>;j-=v[save[posnum>;

   save[posnum]++;

  }

 }

 printf("%5d",count);

}

int jump(int i,int j,int a[N][N]){

 if(i<N&&i>=0&&j<N&&j>=0&&a[i][j]==0)

  return 1;

 return 0;

}

void outplan(int a[N][N]){

 int i,j;

 for(i=0;i<N;i++){

  for(j=0;j<N;j++)

   printf("%3d",a[i][j]);

  printf("\n");

 }

 printf("\n");

 //getchar();

}

用回溯法得到所有的解,但效率较低,只能算出5行5列的


 

相关搜索: N*N的螺旋矩阵

(系统自动生成,下载前可以参看下载内容)

下载文件列表

压缩包 : 新cccc.txt 列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度更多...
  • 请直接用浏览器下载本站内容,不要使用迅雷之类的下载软件,用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.

相关评论

暂无评论内容.

发表评论

*主  题:
*内  容:
*验 证 码:

源码中国 www.ymcn.org