扫雷的算法思考.

文章是老方法的思考,不是新方法.
看了篇扫雷的程序,看到初始化雷的时候,发现了点问题.代码如下:
 1None.gif            int count = 0;
 2None.gif            Random r = new Random((int)DateTime.Now.Ticks);
 3None.gif
 4None.gif            while (count < _mines)
 5ExpandedBlockStart.gifContractedBlock.gif            dot.gif{
 6InBlock.gif                int row = r.Next(0, _rows);
 7InBlock.gif                int col = r.Next(0, _cols);
 8InBlock.gif
 9InBlock.gif                if (!_board[row, col].IsMine)
10ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
11InBlock.gif                    _board[row, col].IsMine = true;
12InBlock.gif                    count++;
13ExpandedSubBlockEnd.gif                }

14ExpandedBlockEnd.gif            }

思考,当100个位置中放入80个雷的时候很慢,因为到后期的几颗雷会总是早到重复的雷.
为了解决这个问题,讨论了下,得出以下结果:
先写一个函数用来把所有的雷顺序填充到数组中,然后进行随机找放雷的坐标,将第一颗雷的坐标和这个坐标互换,依次类推.

有鸡蛋就扔吧..

转载于:https://www.cnblogs.com/winnerzone/archive/2007/01/19/624573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值