算法上机报告.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
算法 上机报告 班级:1403011 学号:14030110030 姓名: 付尧 1. 使用合并-查找数据结构,实现估计渗漏(Percolation)问题阈值的程序。 思路分析: 使用union-found 算法,利用quick-union方法,定义一个N*N的矩阵,依次从1-N*N编号,在模拟渗漏问题时采用一种流动的思想,当按序号增大的顺序一次判断该块是否被打开,按照老师课件上的提示在顶部和底部各设置一个点,顶部点和第一排所有点都联通,底部点和最后一排所有点都联通,流动完之后判断这两个点是否联通即可。 源代码: import java.util.ArrayList; import java.util.List; public class Percolation { private static int SITE_BLOCKED = -1; private int[][] wraper; private int N; private int openCounts = 0; int[][] topAndButtom; public Percolation(int N) //创建一个矩阵表示渗透图,每个图的格子初始化为被锁定状态,顶端行和底端行放到另外建立的2*N数组中 { this.N = N; wraper = new int[N][N]; topAndButtom = new int[2][N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { wraper[i][j] = SITE_BLOCKED; if (i<2) { topAndButtom[i][j] = SITE_BLOCKED; } } } } public void open(int i, int j) { //检查坐标为(i, j)的点是否开启,如果没有开启,则将其开启。 //注意i,j的取值范围为1~N。此外,开启格子后,需要检查其上下左右的格子是否同样已经打开, if (!isOpen(i, j)) {//如果该点没打开 openCounts ++;//统计值+1 wraper[i][j] = i * N + j;//每个点的值初始化为当前点的坐标的hash值 if (isTopOrButtom(i)) topAndButtom[i/(N-1)][j] = wraper[i][j]; //开启格子后,需要检查其上下左右的格子是否同样已经打开,如果已经打开,则通过union()方法将两个格子连通起来;另外根据作业要求,需要首先检查是否越界, if ((j - 1) >= 0) { if (isOpen(i, j - 1)) //left { int pos = find(i, j - 1); union(pos / N, pos % N, i, j); } } if ((j + 1) < N) { if (isOpen(i, j + 1)) //right { int pos = find(i, j + 1); union(pos / N, pos % N, i, j); } } if ((i - 1) >= 0) { if (isOpen(i - 1, j)) //top { int pos = find(i - 1, j);//查找根节点 union(pos /

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体张**

1亿VIP精品文档

相关文档

相关课程推荐