扫雷的算法思考.
文章是老方法的思考,不是新方法.
看了篇扫雷的程序,看到初始化雷的时候,发现了点问题.代码如下:
看了篇扫雷的程序,看到初始化雷的时候,发现了点问题.代码如下:
1 int count = 0;
2 Random r = new Random((int)DateTime.Now.Ticks);
3
4 while (count < _mines)
5 {
6 int row = r.Next(0, _rows);
7 int col = r.Next(0, _cols);
8
9 if (!_board[row, col].IsMine)
10 {
11 _board[row, col].IsMine = true;
12 count++;
13 }
14 }
2 Random r = new Random((int)DateTime.Now.Ticks);
3
4 while (count < _mines)
5 {
6 int row = r.Next(0, _rows);
7 int col = r.Next(0, _cols);
8
9 if (!_board[row, col].IsMine)
10 {
11 _board[row, col].IsMine = true;
12 count++;
13 }
14 }
思考,当100个位置中放入80个雷的时候很慢,因为到后期的几颗雷会总是早到重复的雷.
为了解决这个问题,讨论了下,得出以下结果:
先写一个函数用来把所有的雷顺序填充到数组中,然后进行随机找放雷的坐标,将第一颗雷的坐标和这个坐标互换,依次类推.
有鸡蛋就扔吧..