zoukankan      html  css  js  c++  java
  • 冯泽来玩扫雷(搜索)

    问题描述

    在一个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;
    }

  • 相关阅读:
    MYSQL5.6学习——mysqldump备份与恢复
    【转】分布式与集群的区别
    (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
    (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
    git pull总是要输入账号和密码
    Undefined index: validate(thinkphp)
    mysql table status
    如何学习web开发环境搭建和脚手架
    serversql tinkphp
    apache 配置
  • 原文地址:https://www.cnblogs.com/937337156Zhang/p/5671720.html
Copyright © 2011-2022 走看看