#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define big 200voidput(FILE*outstream, double data1, double data2){fprintf(outstream,"%f,%f\n,", data1, data2);}voidinit(int *p, long size){
int *q = p;while(q<(p+size)){*q =0;
q++;}*(q-size/2+big/2)=1;}//随机行走 voidwalk(int *x, int *y, int s){
int step =rand()%8;
int p1 =*x-1;
int p2 =*x+1;
int s1 =*y-1;
int s2 =*y+1;if(*x==0)
p1 = s-1;elseif(*x==s-1)
p2 =0;if(*y==0)
s1 = s-1;elseif(*y==s-1)
s2 =0;switch(step){case0:*x = p2;//+break;case1:*x = p1;//-break;case2:*y = s2;//+break;case3:*y = s1;//-break;case4:*x = p2;*y = s2;//++break;case5:*x = p1;*y = s1;//--break;case6:*x = p2;*y = s1;//+-break;case7:*x = p1;*y = s2;//-+break;default:printf("运行错误!");break;}}//判断是否靠近
bool judge(int x, int y, int space[][big], int s){
int p1 = x-1;
int p2 = x+1;
int s1 = y-1;
int s2 = y+1;if(x==0)
p1 = s-1;//19elseif(x==s-1)
p2 =0;if(y==0)
s1 = s-1;elseif(y==s-1)
s2 =0;if(space[p2][y]==1)returntrue;if(space[p1][y]==1)returntrue;if(space[x][s2]==1)returntrue;if(space[x][s1]==1)returntrue;if(space[p2][s2]==1)returntrue;if(space[p2][s1]==1)returntrue;if(space[p1][s2]==1)returntrue;if(space[p1][s1]==1)returntrue;returnfalse;}voidDLA(int width, int space[][big]){
int i;for(i=0; i<3000; i++){//生成随机点
int x =rand()% width;//0-19
int y =rand()% width;if(space[x][y]==1)continue;while(!judge(x,y,space,width)){walk(&x,&y, width);}
space[x][y]=1;}}
int main(int argc, char *argv[]){
int space[big][big];
long size =sizeof(space)/4;//元素个数
int width =sqrt(size);init(*space,size);DLA(width,space);//***********************************FILE*outstream;if((outstream=fopen("hahaha.dat","ab"))==NULL){printf("Cannot open file, press any key to exit!\n");exit(1);}//************************************/
int m, n;for(m=0; m<width; m++){for(n=0; n<width; n++){if(space[m][n]==1)put(outstream,m*1.0,n*1.0);printf("%d\t",space[m][n]);}}fclose(outstream);return0;}
三、结果分析
四、写在最后
编程过程中点阵的数目不宜过大或过小,过大计算时间长,过短无法体现明显现象。
关于DLA的一些其他扩散和聚集领域应用。本次测试只是为了体现随机行走的基本思想,该思想在其他领域的研究应用也非常广泛。例如:P2P 搜索中Random Walk 搜索方法搜索信息的扩散;在高分子中,高分子的形状类似于无规则行走,以及在金融等其他领域。