码迷,mamicode.com
首页 > 其他好文 > 详细

蛇形填充

时间:2015-09-19 19:27:37      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

蛇形填充

 1 //局限性:只能实现1-10的功能 
 2 #include <iostream>
 3 #include <string.h>
 4 using namespace  std;
 5 #define MAXN 10
 6 int a[MAXN][MAXN];
 7 
 8 int main(){
 9     int n,x,y,tot=0;
10     cin>>n;
11     memset(a,0,sizeof(a));//将已开辟内存空间a的首sizeof(a)个字节的值设为值0。
12                           //函数原型为:void *memset(void *s,int c,size_t n)    
13     tot=a[x=0][y=n-1]=1;
14     
15     while(tot<n*n){
16         while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot;
17             //精彩之处在于while循环的设置,还有判断是否为0的操作至关重要,
18             //这里的设置完全遵循了 “蛇形填充”的过程 
19         while(y-1>=0&&!a[x][y-1]) a[x][--y]=++tot;
20         while(x-1>=0&&!a[x-1][y]) a[--x][y]=++tot;
21         while(y+1<n&&!a[x][y+1]) a[x][++y]=++tot;
22     }    
23     
24     for(x=0;x<n;++x){
25         for(y=0;y<n;++y){
26             cout<<a[x][y]<<" ";
27         }
28         cout<<endl;
29     }
30     
31 }
32  

 

下面是另一段描述:

 

 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 
 4 int main(){
 5     int i=0;
 6     int j=0;
 7     int k=0;
 8     int data[20][20]={0};
 9     int count=0;
10     int N=0;
11     printf("请输入一个整型数字:\n");
12     scanf("%d",&N);
13     
14     for(k=0;k<N/2;k++){
15         for(i=k;i<N-k;i++){
16             data[k][i]=++count;
17         }
18         for(i=k+1;i<N-k;i++){
19             data[i][N-k-1]=++count;
20         }
21         for(i=N-k-2;i>k;i--){
22             data[N-k-1][i]=++count;
23         }
24         for(i=N-k-1;i>k;i--){
25             data[i][k]=++count;
26         }
27     } 
28     if(N%2!=0){
29         data[N/2][N/2]=N*N;
30     }
31     for(i=0;i<N;i++){
32         for(j=0;j<N;j++){
33             printf("%3d",data[i][j]);
34         }
35         printf("\n");
36     }
37     system("pause");
38     return 0;
39 }

 

蛇形填充

标签:

原文地址:http://www.cnblogs.com/liugl7/p/4821915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!