Advertisement
Guest User

Untitled

a guest
Mar 20th, 2012
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define nmax 100
  4.  
  5.  
  6. int bit (unsigned char v[nmax][nmax], int a, int b, int n) {
  7.   if (a<0 || a>=8*n)return 0;
  8.   if (b<0 || b>=8*n)return 0;
  9.   if(v[a][b/8] & (1<<(b%8)))return 1;
  10.   return 0;
  11. }
  12.  
  13. int vecini ( int a, int b, unsigned char v[nmax][nmax],int n)
  14. {
  15.   int k=0;
  16.   if ( bit( v, a+1, b,n) )
  17.     k++;
  18.   if ( bit( v, a+1, b+1,n))
  19.     k++;
  20.   if ( bit( v, a-1, b,n) )
  21.     k++;
  22.   if ( bit( v, a-1, b+1,n))
  23.     k++;
  24.   if ( bit( v, a-1, b-1,n) )
  25.     k++;
  26.   if ( bit( v, a+1, b-1,n) )
  27.     k++;
  28.   if ( bit( v, a, b-1,n) )
  29.     k++;
  30.   if ( bit( v, a, b+1,n) )
  31.     k++;
  32. return k;
  33. }
  34.  
  35. void set ( unsigned char v[nmax][nmax], int a, int b, int valoare,int n)
  36. {
  37.   v[a][b/8]=v[a][b/8] | (valoare<<(b%8));
  38. }
  39. void evolve ( unsigned char v1[nmax][nmax], unsigned char v2[nmax][nmax],int n)
  40. {
  41.   int k=0;
  42.   int i,j;
  43.   for (i=0;i<8*n;i++)
  44.     for (j=0;j<8*n;j++)
  45.       if (bit(v1,i,j,n)){
  46.     k=vecini(i,j,v1,n);
  47.     if ((k!=3) && (k!=2))
  48.       set (v2,i,j,0,n);
  49.     else
  50.       set (v2,i,j,1,n);
  51.       }
  52.       else
  53.       {
  54.         k=vecini(i,j,v1,n);
  55.         if (k==3)
  56.           set (v2,i,j,1,n);
  57.         else
  58.           set (v2,i,j,0,n);
  59.       }
  60. }
  61. int main () {
  62.  
  63.   unsigned char v1[nmax][nmax],v2[nmax][nmax];
  64.   int n,i,j,nrgen,k,t,y;
  65.  
  66.   scanf ("%d", &n);
  67.  
  68.   for (i=0;i<8*n;i++)
  69.     for (j=0;j<n;j++) {
  70.       scanf ("%d", &k);
  71.       v1[i][j]=k;
  72.     }
  73.     scanf ("%d", &nrgen);
  74.   for (i=1;i<=nrgen;i++)
  75.   {
  76.    if (i%2)
  77.    {
  78.      for(t=0;t<8*n;t++)
  79.        for(y =0;y<n;y++)
  80.      v2[t][y]=0;
  81.     evolve (v1,v2,n);
  82.    }
  83.    else{
  84.       for(t=0;t<8*n;t++)
  85.        for(y =0;y<n;y++)
  86.      v1[t][y]=0;
  87.      evolve (v2,v1,n);}
  88.   }
  89.  
  90.   if (nrgen%2) {
  91.     for (i=0;i<8*n;i++)
  92.     {
  93.       for (j=0;j<n;j++)
  94.     printf ("%d ",(int)v2[i][j]);
  95.       printf ("\n");
  96.     }
  97.   }
  98.   else
  99.   {
  100.     for (i=0;i<8*n;i++) {
  101.       for (j=0;j<n;j++)
  102.     printf ("%d ", (int)v1[i][j]);
  103.       printf ("\n");
  104.     }
  105.   }
  106.   return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement