Lab3
功能
渗透模型用Monto Carlo模拟法计算出概率阈值p,并用图形化显示形象展现这一结果
方法
计算
使用加权快速联合算法(加权quick-union)快速判断两个节点是否连通
所用的函数:
void init()int find(int p)void weighted_QU(int p, int q)bool isUnion(int p, int q)
构造渗透类(
Percolation),建立n*n网格使用并查集来维护每个格子的连通性。我们可以将每个格子看作一个节点,并将相邻的格子连接起来。如果一个格子与顶部相连,则它是满的。我们可以使用一个虚拟节点来表示顶部,将所有顶部的节点连接到这个虚拟节点上。如果虚拟节点与底部相连,则整个系统渗透。
所用的函数:
void open(int row, int col)bool isOpen(int row, int col)bool isFull(int row, int col)int numberOfOpenSites()bool percolates()
开始模拟,随机打开格子,直到渗透为止,则此时打开的格子数/总格子数即为p
所用的函数:
rand()
画图
在
gridLayout里绘制n*n的label,根据该格子的状态给label绘制不同的颜色,黑色表示未连通,白色表示连通,蓝色表示full所用的函数:
void setAlignment(Qt::Alignment)//设置对齐方式void setStyleSheet(const QString& styleSheet)//设置标签样式inline void addWidget(QWidget *w)void setLayout(QLayout *)
清除所有
label以便下次模拟
效果
不勾选图形化显示时
勾选图形化显示时
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夏至未至!
评论



