update README

This commit is contained in:
2023-10-07 11:51:45 +08:00
parent e4134689c5
commit 5ec5eb224e

View File

@ -1,7 +1,27 @@
# 思路简介
## Server
相当于一道模拟题,注意时间效率不要太差以及细节问题
## Client
扫雷一般是采用如下思路:
1. 根据已翻开的数字推测周围的哪些格子里有多少雷在此基础上进行逻辑推理当推断出n个格子里有0个或n个雷时我们就可以确定了。优先点开确定的雷。
2. 当没有确定的雷点击时,进行一些猜测。
### 确定解
在尝试寻找确定解时我采用的方式是在每个待求解格子上设一个未知数解一个方程组在高斯——约旦消元的基础上特判一下n个格子里有0个或n个雷由于这个特判过程不是基本行变换对线性方程的影响可能不太可靠多求解几次。
### 猜解
1. 在猜测时对于一个已翻开的格子如果它周围的n个未知格子里应当有m个雷那么把$\frac{m}{n}$用幂函数$f(x)=x^k ([0,1]\to [0,1])$处理一下,并把处理结果塞进那些未知格。对于已知格和未知格为边相邻和角相邻,$f(x)$分两种,它们的幂次不同。这个步骤的目的是赋予边相邻和角相邻的情况不同的权重。
2. 当一个格没有收集到任何数时采用一个全局默认估计有雷频率初始为0.06,当已翻开格子足够多后用已知区实际计算比例)替代$\frac{m}{n}$,幂函数的幂次为两种幂次的算术平均数,把全局默认估计有雷频率用幂函数处理一下视作这个格子收到的数。
3. 随后对于每个未知格把它收集到的数取一个t次方平均数由此得到最终估计有雷概率。这个步骤的目的是赋予较大的值更大的权重这样更加慎重一点。
4. 在得到最终估计有雷概率后扫描整个地图找严格概率最小的那个格子。但是在还剩最后5%的格子没有被点开时,仿照模拟退火以一定可能性允许概率更大的格子替换当前解
___
# references目录下的参考信息来源 # references目录下的参考信息来源
~~虽然好像根本没看~~
- <https://github.com/DavidNHill/Minesweeper> - <https://github.com/DavidNHill/Minesweeper>
- <https://github.com/DavidNHill/Minesweeper2> - <https://github.com/DavidNHill/Minesweeper2>
- <https://dash.harvard.edu/bitstream/handle/1/14398552/BECERRA-SENIORTHESIS-2015.pdf> - <https://dash.harvard.edu/bitstream/handle/1/14398552/BECERRA-SENIORTHESIS-2015.pdf>
___ ___
# Minesweeper-2023 # Minesweeper-2023
> ACM 班 2023 级程序设计第一次大作业 > ACM 班 2023 级程序设计第一次大作业