冯泽来玩扫雷(搜索)

问题描述

在一个n*m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示)。
冯泽来想在每个空地上写下它周围8 个方向相邻的格子中有几个雷。
请帮助他输出写了之后的棋盘
输入
输入第一行包含两个整数n, m 代表棋盘大小
接下来n 行,每行m 个字符,代表棋盘
1≤n,m≤1000
输出
输出包含n 行,每行m 个字符,代表冯泽来写了数字之后的棋盘

输入样例1

3 3

*.*

...

*.*

输出样例1

*2*

242

*2*

 

此题解析略,直接找。。(也可以定义一个方向数组循环,只用注意外面套一层防止超界)

#include<cstdio>
#include<iostream>
using namespace std;
char a[1005][1005];
int n,m;
int main()
{
  freopen("mine.in","r",stdin);
  freopen("mine.out","w",stdout);
  ios::sync_with_stdio(false);
  cin>>n>>m;//scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++)
  for(int j=1;j<=m;j++)
  {
    cin>>a[i][j];//scanf("%c",&a[i][j]);
    if(a[i][j]=='.')
    a[i][j]='0';
  }
  if(a[1][1]=='0')
  {
    if(a[2][1]=='*')a[1][1]++;
    if(a[1][2]=='*')a[1][1]++;
    if(a[2][2]=='*')a[1][1]++;
  }
  if(a[1][m]=='0')
  {
    if(a[1][m-1]=='*')a[1][m]++;
    if(a[2][m]=='*')a[1][m]++;
    if(a[2][m-1]=='*')a[1][m]++;
  }
  if(a[n][1]=='0')
  {
    if(a[n-1][1]=='*')a[n][1]++;
    if(a[n-1][2]=='*')a[n][1]++;
    if(a[n][2]=='*')a[n][1]++;
  }
  if(a[n][m]=='0')
  {
    if(a[n-1][m]=='*')a[n][m]++;
    if(a[n][m-1]=='*')a[n][m]++;
    if(a[n-1][m-1]=='*')a[n][m]++;//4角
  }
  for(int i=2;i<=m-1;i++)
  {
    if(a[1][i]=='0')
    {
      if(a[1][i-1]=='*')a[1][i]++;
      if(a[1][i+1]=='*')a[1][i]++;
      if(a[2][i]=='*')a[1][i]++;
      if(a[2][i-1]=='*')a[1][i]++;
      if(a[2][i+1]=='*')a[1][i]++;
    }
    if(a[n][i]=='0')
    {
      if(a[n][i-1]=='*')a[n][i]++;
      if(a[n][i+1]=='*')a[n][i]++;
      if(a[n-1][i]=='*')a[n][i]++;
      if(a[n-1][i-1]=='*')a[n][i]++;
      if(a[n-1][i+1]=='*')a[n][i]++;//横向两边
    }

  }
  for(int i=2;i<=n-1;i++)
  {
    if(a[i][1]=='0')
    {
      if(a[i-1][1]=='*')a[i][1]++;
      if(a[i+1][1]=='*')a[i][1]++;
      if(a[i][2]=='*')a[i][1]++;
      if(a[i-1][2]=='*')a[i][1]++;
      if(a[i+1][2]=='*')a[i][1]++;
    }
    if(a[i][m]=='0')
    {
      if(a[i-1][m]=='*')a[i][m]++;
      if(a[i+1][m]=='*')a[i][m]++;
      if(a[i][m-1]=='*')a[i][m]++;
      if(a[i-1][m-1]=='*')a[i][m]++;
      if(a[i+1][m-1]=='*')a[i][m]++;//纵向两边
    }
  }
  for(int i=2;i<=n-1;i++)
  for(int j=2;j<=m-1;j++)
  {
    if(a[i][j]=='0')
    {
      if(a[i][j-1]=='*')a[i][j]++;
      if(a[i][j+1]=='*')a[i][j]++;
      if(a[i-1][j]=='*')a[i][j]++;
      if(a[i+1][j]=='*')a[i][j]++;
      if(a[i-1][j-1]=='*')a[i][j]++;
      if(a[i+1][j-1]=='*')a[i][j]++;
      if(a[i-1][j+1]=='*')a[i][j]++;
      if(a[i+1][j+1]=='*')a[i][j]++;
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    cout<<a[i][j];//printf("%c",a[i][j]);
    cout<<endl;//printf("\n");
  }
  return 0;
}

posted @ 2016-07-14 20:49  deadshotz  阅读(119)  评论(0编辑  收藏  举报