也没有查过资料,不知道先人是否已经提出这样的算法,也不想考究.

只因我们java大作业要编"扫雷",所以将我个人设计的扫雷的布雷算法放在这里此算法不需要做什么判断,简单一点.闲话不多说,开始讨论扫雷的布雷算法:

1.

在生成雷区的时候采取的策略是:上下多加两行,左右各加两列;

2.

在生成雷的时候采取的是:如果要生成count颗类,那么产生2*count对随机数,然后删除重复的.如果剩余的随机数的对数大于等于count时,则生成为止,否则再次重复;

3.

在生成扫雷提示信息时,从2中生成的随机数对从0到count-1中分别取出雷的下标,将以此为中心的九格加一.

完成0到count-1次后,再将雷所在的位置赋为"-1".

自此,布雷完成. 为了帮助大家理解,我附上java编写的代码:

package mine;

import java.util.ArrayList;

public class CreateMinesMatrix {

int[][]

mineField;//**********雷区************

private

ArrayList mine=new ArrayList();//***********雷的位置**********

private int

mineCount=0;

private int

rows=0;

private int

columns=0;

public

void setMineField(int row,int clo){

//************雷区大小***********

rows=row;

columns=clo;

mineField=new int[row+2][clo+2];

for(int i=0;i

for(int j=0;j

mineField[i][j]=0;

}

public

void setMineNumber(int num){//初始化,设置雷的数目

this.mineCount=num;

}

public

void generateMines(){

//**********生成地雷*****************

for(int j=0;j<2*mineCount;j++){

int grow=(int) Math.round(Math.random()*(rows-1)+1);

int gclo=(int) Math.round(Math.random()*(columns-1)+1);

ArrayList temp=new ArrayList();

temp.add(grow);

temp.add(gclo);

mine.add(temp);

}//*****产生雷

//******剔除重复的雷

int i=0;

for(int m=0;m

for(int n=m+1;n

if((mine.get(n).get(0).equals(mine.get(m).get(0)))&&(mine.get(n).get(1).equals(mine.get(m).get(1))))

mine.remove(n);

}

//**********验证雷个数的有效性************

public

void validateMines(){

while(mine.size()

generateMines();

}

public

void generateMineHints(){

//*******生成寻雷的指示信息***

for(int i=0;i

int hrow=Integer.parseInt(mine.get(i).get(0).toString())-1;

int hclo=Integer.parseInt(mine.get(i).get(1).toString())-1;

for(int m=hrow;m

for(int n=hclo;n

mineField[m][n]++;

}

//**********向雷区中填入雷****************

for(int i=0;i

int hrow=Integer.parseInt(mine.get(i).get(0).toString());

int hclo=Integer.parseInt(mine.get(i).get(1).toString());

mineField[hrow][hclo]=-1;

}//扫雷核心代码生成完成

}

public void

print(){

//*************打印地雷************************

for(int i=1;i

for(int j=1;j

System.out.print(mineField[i][j]+" ");

System.out.println("");

}

}

public static void main(String[] args) {

//**************测试布雷的正确性**********************

//*******在此我就不掉用了,数字很小,就不想调用验证了******

CreateMinesMatrix kk=new CreateMinesMatrix();

kk.setMineField(5,6);

kk.setMineNumber(4);

kk.generateMines();

kk.generateMineHints();

kk.print();

}

}

运行结果1:

1 2 2 1 0 0 1 -1 -1 2 2 1 1 2 3 -1 2 -1 0 0 1 1 2 1 0 0 0 0 0 0

运行结果2:

0 1 2 2 1 0 0 1 -1 -1 2 0 0 1 4 -1 3 0 0 0 2 -1 2 0 0 0 1 1 1 0 *注:-1表示雷,其它的数字表示其周围雷的颗数.

[2010年12月24日 12时08分]

java扫雷布雷算法_扫雷的布雷算法相关推荐

  1. python扫雷 高级算法_扫雷游戏的布雷算法、策略与优化(附Python代码)

    1 布雷算法的应用 在扫雷游戏中,将雷均匀地分布在局面中依靠一种布雷算法.众所周知,在原始版本的Windows扫雷中,由于布雷算法的缺陷,使得其存在Board Cycle(局面循环).而标准扫雷游戏中 ...

  2. java 哈希一致算法_一致哈希算法Java实现

    一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...

  3. hash算法_数据库中间件分片算法之hash

    前言 夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无. 分片规则 这几天有人问我,dble和MyCat到底有什么不同.其实dble作为MyCAT的同门, ...

  4. mysql区间算法_「五大常用算法」一文图解分治算法和思想

    前言 分治算法(divide and conquer)是五大常用算法(分治算法.动态规划算法.贪心算法.回溯法.分治界限法)之一,很多人在平时学习中可能只是知道分治算法,但是可能并没有系统的学习分治算 ...

  5. 人工智能算法_人工智能的灵魂——算法

    人工智能有三驾马车:数据.算法.算力.本文重点介绍算法相关的知识. 本文将介绍算法在人工智能里的概念,算法的4个特征.6个通用方法.以及在选择算法时需要注意的3个点. 什么是算法? 简单的说,算法就是 ...

  6. kmeans算法_实战 | KMeans 聚类算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  7. 麻雀优化算法_多种智能优化算法应用案例分享-附代码

    1.智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割 智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割-附代码_Jack旭的博客-CSDN博客​blog.csdn.net 2.智能优化算法 ...

  8. 文本聚类分析算法_常用的聚类分析算法综述

    聚类分析定义 所谓聚类就是按照事物的某些属性,把事物聚集成类,使类间的相似性尽可能小,类内相似性尽可能大.聚类是一个无监督的学习过程,它同分类的根本区别在于分类是需要事先知道所依据的数据特征,而聚类是 ...

  9. 机器学习算法_机器学习之EM算法和概率图模型

    [晓白]今天我准备更新Machine Learning系列文章希望对机器学习复习和准备面试的同学有帮助!之前更新了感知机和SVM,决策树&代码实战,关注我的专栏可以的文章哦!今天继续更新EM算 ...

最新文章

  1. SQL:找出我(uid=2)所有的好友信息,和这些好友发布的最新的一篇文章
  2. UE3客户端加入DS过程
  3. Linux内核启动流程分析(一)【转】
  4. 人类最强运载火箭诞生!马斯克吹的牛再次兑现!
  5. excel vb ppap_vb是什么平台-常见问题
  6. 2019手机浏览器排名_不开玩乐!2019最强手机浏览器
  7. 佳能G3800黄灯绿灯交替闪烁7次,错误代码5B00
  8. Navicat for Mysql永久激活方法
  9. 快速搭建你的api数据交易平台-图文开发教程
  10. win10家庭版桌面软件图标左下角箭头删除
  11. 账号被罚了,申诉的结果出来了,果然
  12. 软件设计师中级: 2019年上半年软件设计师考试上午真题 专业解析+参考答案
  13. Rasa 3.x 学习系列-Rasa [3.4.1] - 2023-01-19新版本发布
  14. 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...
  15. matlab 改变像素颜色,MATLAB图像处理_直接操作像素点进行颜色变换
  16. 对话系统 | (1) 任务导向型对话系统 -- 对话管理模型研究最新进展
  17. 安卓设置keychain_共享keychain数据
  18. nvm You do not have sufficient privilege to perform this operation.
  19. PaddleDetection重磅升级!PP-YOLOE、PP-PicoDet云边端一网打尽!
  20. STM32 串口3 总是进入接收中断

热门文章

  1. LaTeX常用操作:添加标题、作者、时间、摘要、标题、段落、目录、字体、引用、脚注、图片\表格插入、数学符号、公式、交叉引用等
  2. C语言实现斐波那契数列。
  3. ppt在线快速转换成pdf的方法
  4. cass块参照怎么改颜色_【干货】CASS自定义图斑填充技巧
  5. 3D人脸查看器和匹配器
  6. C语言(C++)打开有规律名称的多个文件,并写入数据
  7. 实体零售纷纷转型,苏宁、乐语到底能给我们带来哪些启示?
  8. 软考报名季,软考高级应该怎么选?
  9. Linux启动nacos成功日志_SpringCloud Alibaba-nacos注册中心
  10. HTML(一)静态登录注册页面附有完整网页(html+css+js)