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 许可协议。转载请注明来自 夏至未至!
评论