作业帮 > 综合 > 作业

c++蒙特卡洛方法随机行走

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/24 16:09:02
c++蒙特卡洛方法随机行走
利用蒙特卡洛模拟实现20×20格子上的随机行走.设随机行走者开始于点(0,0)处,计算经过时间t=10000步后随机行走者在各格点出现的概率.
如下模拟1000次.#include <iostream>
#include <algorithm>
using namespace std;

double a[20][20] = {0};
int dir[][2] = {{-1,0},{1,0},{0,-1},{0,1}};

void nextxy(int &x, int &y){
\x09int a[4] = {0,1,2,3};
\x09random_shuffle(a, a+4);
\x09for(int i=0; i<4; i++){
\x09\x09int newx = x+dir[a[i]][0],
\x09\x09\x09newy = y+dir[a[i]][1];
\x09\x09if(newx>=0 && newx<20 && newy>=0 && newy<20){
\x09\x09\x09x = newx;
\x09\x09\x09y = newy;
\x09\x09\x09return;
\x09\x09}
\x09}
}

int main(){
\x09int count = 10;
\x09for(int k=0; k<count; k++){
\x09\x09int x = 0, y = 0;
\x09\x09for(int i=0; i<10000; i++)
\x09\x09\x09nextxy(x, y);
\x09\x09a[x][y]++;
\x09}
\x09for(int i=0; i<20; i++){
\x09\x09for(int j=0; j<20; j++)
\x09\x09\x09cout << a[i][j]/count << ' ';
\x09\x09cout << endl;
\x09}
}时间复杂度为o(10000n),n为模拟次数.当n较大时,花费时间较多.