⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xibao1.cpp

📁 细胞自动机的
💻 CPP
字号:
#include "stdio.h"
#include <math.h>
#include <stdlib.h>
int eaten(double zb,int rabnum,int foxnum)
{
	int eatnum;
	if(zb<0.6 && foxnum*4/7<=rabnum)
		eatnum = foxnum*4/7;
	if(zb>=0.6 && (int)(foxnum*2)/7<=rabnum)
		eatnum = (int)(foxnum*2/7);
	return eatnum;
}
int rabbreed(double zb,int rabnum)
{
	int lrabnum;
	if(zb>0.1&&zb<0.2)
	{
		if(rabnum<2) lrabnum = 0;
		else if(rabnum>=2&&rabnum<=700) lrabnum = 3;
		else lrabnum = 2;
	}
	else if(zb<=0.2 && zb<0.5)
	{
		if(rabnum<2) lrabnum = 0;
		else if(rabnum>=2 && rabnum<=700) lrabnum = 4;
		else lrabnum = 3;
	}
	else if(zb<=0.5 && zb<0.8) 
	{
		if(rabnum<2) lrabnum = 0;
		else if(rabnum>=2 && rabnum <= 200) lrabnum = 6;
		else if(rabnum>=201 && rabnum <=700) lrabnum = 5;
		else lrabnum = 4;
	}
	else if(zb>=0.8 && zb <=1.0)
	{
		if(rabnum < 2) lrabnum = 0;
		else if(rabnum>=2 && rabnum <= 200) lrabnum = 9;
		else if(rabnum>=201 && rabnum <=700) lrabnum = 8;
		else if(rabnum>=701 &&rabnum <=5000) lrabnum = 7;
		else lrabnum = 5;
	}
	return lrabnum;
}
int foxbreed(int rabnum,int foxnum)
{
	int lfoxnum;
	if(foxnum < 2) lfoxnum = 0;
	else if(foxnum<=2 && foxnum<=10)
	{
		if(rabnum<foxnum*3.0) lfoxnum = 2;
		else if(rabnum>=foxnum * 3.0 && rabnum < 10*foxnum) lfoxnum = 3;
		else if(rabnum>=10*foxnum && rabnum < 40*foxnum) lfoxnum = 4;
		else if(rabnum >= 40*foxnum) lfoxnum = 5;
	}
	else if(foxnum>=11 && foxnum<=50)
	{
		if(rabnum<foxnum*3.0) lfoxnum = 2;
		else if(rabnum>=foxnum*3.0 && rabnum<foxnum*40) lfoxnum = 3;
		else lfoxnum = 4;
	}
	else if(foxnum>=51 && foxnum <=100)
	{
		if(rabnum<foxnum*3.0) lfoxnum = 1;
		else if(rabnum>=foxnum*3.0 && rabnum<foxnum*10) lfoxnum = 2;
		else lfoxnum = 3;
	}
	else
	{
		if(rabnum<foxnum*3.0) lfoxnum = 0;
		else if(rabnum>=foxnum * 3.0 && rabnum < 10*foxnum) lfoxnum = 1;
		else if(rabnum>=10*foxnum && rabnum < 40*foxnum) lfoxnum = 2;
		else if(rabnum >= 40*foxnum) lfoxnum = 3;
	}
	return lfoxnum;
}
int deadfox(int rabnum,int foxnum)
{
	int deadfoxnum;
	if(rabnum < (int)(foxnum * 2/7))  
		deadfoxnum = (int)0.1 * foxnum;
	else
		deadfoxnum = 0;
	return deadfoxnum;
}
void main()
{
	int rab[8][8],fox[8][8];
	int r[8][8],f[8][8],r1[8][8];
	double vege[8][8];
	int i,j,d = 0,randrab = 0,randfox = 0;
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
		{
			rab[i][j] = 100;
			fox[i][j] = 2;
			vege[i][j] = 1.0;
		}
	}
	
	while(d <15)
	{
		d = d + 1;
	
	   for(i=0;i<8;i++)
	   {
		for(j=0;j<8;j++)
		{
			//计算兔子的数目     
				
			randrab = (int)(abs(rand()) * 0.00001 * rab[i][j]);
			//printf("%d ",randrab);
			if(d % 63 == 0)
				r[i][j] = rab[i][j] - eaten(vege[i][j],rab[i][j],fox[i][j]) - randrab + rabbreed(vege[i][j],rab[i][j]);
			else
			    r[i][j] = rab[i][j] - eaten(vege[i][j],rab[i][j],fox[i][j]) - randrab ;
            
		    if(j != 0)	r1[i][j-1] = (int)(abs(rand()) * 0.00001 * r[i][j] * 0.2);
			if(j != 7)  r1[i][j+1] = (int)(abs(rand()) * 0.00001 * r[i][j] * 0.2);
			if(i != 0)  r1[i-1][j] = (int)(abs(rand()) * 0.00001 * r[i][j] * 0.2);
			if(i != 7)  r1[i+1][j] = (int)(r[i][j] * 0.2) - r[i][j-1] - r[i][j+1] - r[i-1][j];//需要修改
			r[i][j] = (int)(r[i][j] *(1 - 0.2));
            
			//计算狐狸的数目
			randfox = (int)(abs(rand()) * 0.00002 * fox[i][j]);
			if(d % 180 ==0)
			    
			    f[i][j] = fox[i][j] + foxbreed(rab[i][j],fox[i][j]) - deadfox(rab[i][j],fox[i][j]) - randfox; //- 饿死和自然死亡的;
			else
				f[i][j] = fox[i][j] - deadfox(rab[i][j],fox[i][j]) - randfox; //- 饿死和自然死亡的;
			//for(k = 0;k < fox[i][j];k++)


		    //计算植被
			vege[i][j] = 0.11 * vege[i][j] -0.001 * rab[i][j];
		    
		}		
	   }
	   for(i = 0;i < 8;i++)
	   {
		   for(j = 0;j <8;j++)
		   {
			   rab[i][j] = r[i][j] + r1[i][j];
			   fox[i][j] = f[i][j];
			   //printf("%d  ",rab[i][j]);
			 
		   }
	   }
    }
	for(i = 0;i < 8;i++)
	{
		for(j = 0;j <8;j++) 
			printf("%d   ",rab[i][j]);
		   
	}
    

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -