minesweeper
原题链接:http://www.dotcpp.com/oj/problem1096.html
主要是看懂题目,看懂其实就不难,大意是地雷的地方输出*,不是地雷的话就求出以自己为中心,自己附近的八个有几个雷,然后输出。
主要就是附近八个怎么求,用两个数组,或者像我一样用
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
3*3个数,对应八个方向,还有一个(0,0)是自身
#include <iOStream>
#include <cstdio>
using namespace std;
int m,n;
int cnt;
char a[100][100];
int dfs(int x,int y)
{
int count=0;
for(int i=-1;i<=1;i++){
for(int j=-1;j<=1;j++){
int nx = x+i;
int ny = y+j;
if(nx<m&&nx>=0&&ny<n&&ny>=0)
{
if(a[nx][ny]=='*')
count++;
}
}
}
return count;
}
int main()
{
while(cin>>m>>n)
{
getchar();
if(m==0&&n==0)
break;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
cout<<"field #"<<++cnt<<":"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]=='*')
cout<<"*";
else
cout<<dfs(i,j);
}
cout<<endl;
}
cout<<endl;
}
return 0;
}
文章最后发布于: 2019-02-26 17:20:17