本人在课堂作业写的一个扫雷算法程序,调试运行正常结果正确
是用C#语言写的,分享出来供大家参考 ^_^
希望感兴趣的朋友可以提出意见共同讨论~
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication_SL
{
class Program
{
static void Main(string[] args)
{
while (true)
{
int m, n, number;
Console.WriteLine("请输入雷区的行数");
m = int.Parse(Console.ReadLine());
Console.WriteLine("请输入雷区的列数");
n = int.Parse(Console.ReadLine());
Console.WriteLine("请输入地雷的数量,地雷将随机分布");
number = int.Parse(Console.ReadLine());
Random random = new Random();
int[,] matrix = new int[m, n];
string[,] board = new string[m, n];
int x = 0;
//先布局
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
board[i, j] = ".";
}
}
//装雷
for (int k = 0; k < number; k++)
{
int first = random.Next(m);
int second = random.Next(n);
if (board[first, second] != "*")
board[first, second] = "*";
else
{
k--;
continue;
}
}
//显示雷区
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
Console.Write(board[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("/n/n");
//开始计算
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
x = 0;
for (int k = i - 1; k <= i + 1; k++)
{
if (k == m)
break;
if (k < 0)
continue;
for (int l = j - 1; l <= j + 1; l++)
{
if (l == n)
break;
if (l < 0)
continue;
if (board[k, l] == "*" && board[k, l] != board[i, j])//计算四周雷数
x++;
}
}
if (board[i, j] == "*")//地雷标识
matrix[i, j] = 8;
else
matrix[i, j] = x;
if (matrix[i, j] == 8)
Console.Write("*" + " ");
else
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
}
运行结果: