File:Backtang2.png - 维基百科,自由的百科全书

原始文件 (1,024 × 1,024像素,文件大小:143 KB,MIME类型:image/png


摘要

描述
Italiano: Bak–Tang–Wiesenfeld sandpile, 28 million grains
日期
来源 自己的作品
作者 Claudio Rocchini

许可协议

我,本作品著作权人,特此采用以下许可协议发表本作品:
w:zh:知识共享
署名
本文件采用知识共享署名 3.0 未本地化版本许可协议授权。
您可以自由地:
  • 共享 – 复制、发行并传播本作品
  • 修改 – 改编作品
惟须遵守下列条件:
  • 署名 – 您必须对作品进行署名,提供授权条款的链接,并说明是否对原始内容进行了更改。您可以用任何合理的方式来署名,但不得以任何方式表明许可人认可您或您的使用。

Source Code

#include <stdio.h> #include <stdlib.h> #include <queue>  typedef unsigned char byte; typedef std::pair<int,int> coord; const int    N = 1024; const size_t C = 4; const size_t S = 28000000;  byte M[N][N]; const int dx[4] = {1,0,-1,0};  const int dy[4] = {0,1,0,-1};  int main() {     memset(M,0,N*N); 	     for(size_t steps=0;steps<S;++steps) {         std::queue<coord> q;         if( ++M[N/2][N/2]>=C ) q.push( coord(N/2,N/2) );         while( !q.empty() ) {             const int x = q.front().first;             const int y = q.front().second;             q.pop();             if(M[x][y]<C) continue;             M[x][y] -= 4;             for(int d=0;d<4;++d) {                 const int lx = x+dx[d];                 const int ly = y+dy[d];                 if(lx<0 || lx>=N) continue;                 if(ly<0 || ly>=N) continue; 		if(++M[lx][ly]>=C) q.push( coord(lx,ly) );             }         }     }      const byte co[4][3] = { {255,255,255}, {255,0,0}, {0,255,0}, {0,0,255} };     FILE * fo = fopen("backtang2.ppm","wb");     fprintf(fo,"P6\n%d %d\n255\n",N,N);     for(int x=0;x<N;++x) for(int y=0;y<N;++y)         fwrite(co[M[x][y]],1,3,fo);     fclose(fo);      return 0; } 

说明

添加一行文字以描述该文件所表现的内容

此文件中描述的项目

描繪內容

f5e634e4c4716f43272e8c88965e575c784c5278

145,948 字节

1,024 像素

1,024 像素

文件历史

点击某个日期/时间查看对应时刻的文件。

日期/时间缩⁠略⁠图大小用户备注
当前2012年8月7日 (二) 09:272012年8月7日 (二) 09:27版本的缩略图1,024 × 1,024(143 KB)Rocchini

以下页面使用本文件:

全域文件用途

以下其他wiki使用此文件: