TSxclOvO


私信TA

用户名:15653955115

访问量:366

签 名:

等  级
排  名 17403
经  验 775
参赛次数 5
文章发表 1
年  龄 0
在职情况 学生
学  校 宁夏理工学院
专  业

  自我简介:

TA的其他文章

c++ 小白必备
浏览:176

解题思路:  头顶标注法 
        
注意事项:    注意数组的边界问题 数组的0行和0列参与计算,但都不输出

参考代码:

#include<iostream>

#include<string>


using namespace std;

const int N=110;

char boom[N][N],ans[N][N];

int mark=1;  // 全局定义 文件号


void seeboom(int n,int m)    // 用函数封装 单次扫雷

{

    for(int i=1;i<=n;i++)    // 输入 

    {

        for(int j=1;j<=m;j++)

        {

            char a;

            cin>>a;

            if(a=='*') boom[i][j]=a;

            else boom[i][j]='0';

        }

       

    }

    for(int i=1;i<=n;i++)    // 扫雷

    {

        for(int j=1;j<=m;j++)

        {

            if(boom[i][j]=='*')      //头顶标记法 周围八个位置依次计算

            {

                if(boom[i-1][j-1]!='*') boom[i-1][j-1]++;

                if(boom[i-1][j]!='*') boom[i-1][j]++;

                if(boom[i-1][j+1]!='*') boom[i-1][j+1]++;

                if(boom[i][j-1]!='*') boom[i][j-1]++;

                if(boom[i][j+1]!='*') boom[i][j+1]++;

                if(boom[i+1][j-1]!='*') boom[i+1][j-1]++;

                if(boom[i+1][j]!='*') boom[i+1][j]++;

                if(boom[i+1][j+1]!='*') boom[i+1][j+1]++;

            }

        }

    }

    printf("Field #%d:\n",mark);

    for(int i=1;i<=n;i++)    //输出

    {

        for(int j=1;j<=m;j++)

        {

            printf("%c",boom[i][j]);

        }

        printf("\n");

    }

    return ;

}


int main()  //主函数

{

    int m,n;

    while(1)

    {

        cin>>m>>n;

        if(m==0 && n==0) break;

        seeboom(m,n);

        mark++;

        printf("\n");

    }

    return 0;

}


 

0.0分

6 人评分

  评论区

支持!
2021-11-23 14:47:38
  • «
  • 1
  • »