• 冯泽来玩扫雷(搜索)


    问题描述

    在一个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(" ");
      }
      return 0;
    }

  • 相关阅读:
    关系数据库元数据处理类(一) 创建元数据实体
    常用通用简单文件上传功能
    基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity
    CSS彻底研究(3)
    CSS彻底研究(2)
    CSS彻底研究(1)
    CLR via C#
    前端JS模版库kino.razor
    CLR via C#
    CLR via C#
  • 原文地址:https://www.cnblogs.com/937337156Zhang/p/5671720.html
Copyright © 2020-2023  润新知