#include<iostream>
#include<ctime>
#define NUM_MINE 20 //20行 20 列
using namespace std;
struct Mine{
int state ; //等于1表示是雷
int num; //保存周围雷的个数
};
Mine mines[NUM_MINE][NUM_MINE];
int main()
{ int i,j,k,l;
int row,col;
int mine_num=0;
//布雷
srand((unsigned)time(NULL));//埋下随机种子
for(int index =0;index<30;index++)
{
i=rand()%NUM_MINE;//产生随机数
j=rand()%NUM_MINE;
mines[i][j].state=1;
}
cout<<"雷的分布图:"<<endl;
for ( i =0;i<NUM_MINE;i++)
{
for(j=0;j<NUM_MINE;j++)
cout<<mines[i][j].state<<" ";
cout<<endl;
}
cout<<"----------------------------------------------"<<endl;
//求出各点周围的雷
for (i=0;i<NUM_MINE;i++)
{
for(j=0;j<NUM_MINE;j++)
{
mine_num=0;
row = i;
col = j;
//获取当前点周围点的坐标通常为8个 在边界上为5个 四个角落为3个
int minRow = (row==0)?0:row-1;
int maxRow = (row==NUM_MINE-1)?row+1:row+2;
int minCol = (col==0)?0:col-1;
int maxCol = (col==NUM_MINE-1)?col+1:col+2;
for(k = minRow;k<maxRow;k++)
{
for(l = minCol;l<maxCol;l++)
{
if(i==k&&j==l)
{
//此点是雷
}
else if(mines[k][l].state==1)
{
mine_num++;
}
}
}
mines[i][j].num=mine_num;
}
}
cout<<"各点周围包含的雷的个数:"<<endl;
for ( i =0;i<NUM_MINE;i++)
{
for(j=0;j<NUM_MINE;j++)
{
cout<<mines[i][j].num<<" ";
}
cout<<endl;
}
return 0;
}
测试数据: 20 行 20列 30个雷
测试结果