BJTU1113扫雷问题

1.首次使用cin,cout。使用cin时不能再继续直接在字符串中添加字符,需要用到insert(),而且只能添加字符串;

2.判断边界的函数,解决了数组下标越界的问题;

3.cin、cout总结“http://www.newsmth.net/pc/pccon.php?id=10002714&nid=359771”

4.自己写测试数据,用自己的测试数据调试程序。

以下是源代码

#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int n,i,j,k,l,m;//循环变量
int num1[8]= {-1,-1,-1,0,0,1,1,1};//便于使用循环历遍周围的八个数
int num2[8]= {-1,0,1,-1,1,-1,0,1};
int count[10][10];//记录周围雷的个数
char point[10][10];//记录雷和非雷的位置
string a[22];//字符串数组

bool check(int a, int b )//判断是不是在边界上
{
    if(a>=1 && a<=n && b>=0 && b<n )
        return true;
    else return false;
}

int main()
{
    memset(count,0,sizeof(count));
    memset(point,'.',sizeof(point));

    scanf("%d",&n);
    for( i = 1 ; i <= 2*n ; i++)
    {
        cin >> a[i] ;
    }

    for( i = n+1 ; i < 2*n+1 ; i++ )
    {
        for( j = 0 ; j < n ; j++ )
        {
            if( a[i][j] == 'x' && a[i-n][j] == '.')
            {
                for( k = 0 ; k < 8 ; k++ )
                {
                    if( check(i - n + num1[k],j + num2[k]))//判断是不是在边界上
                    {
                        if( a[i - n + num1[k]] [j + num2[k]] == '*')
                        {
                            count[i-n-1][j] += 1;
                        }
                    }

                }
            }
            else if( a[i][j] == 'x' && a[i-n][j] == '*')//扫中雷
            {
                for(l=1;l<=n;l++)
                    for(m=0;m<=n;m++)
                        if(a[l][m]=='*')
                            point[l-1][m]='*';
            }
        }
    }

    for( i=0 ; i < n ; i++ )
    {
        for( j=0 ; j < n ; j++ )
        {
            if( a[n+1+i][j] == 'x' && a[1+i][j] != '*')//扫中雷
                printf( "%d" , count[i][j] );
            else
                printf( "%c" , point[i][j]);
        }
        printf("\n");
    }


    return 0;
}

按照题目的要求 测试数据有以下两种:

第一种:扫中雷,所有有雷的位置出现*

9 
......... 
**.*..... 
....*.... 
....*.... 
.....*... 
......... 
......... 
.*....... 
.**.*.... 
....xxxxx 
...xxxxxx 
xxxx.xxxx 
xxxx.xxxx 
xxxxx.xxx 
xxxxxxxxx 
xxxxxxxxx 
x.xxxxxxx 
.....xxxx
第二种:题目中给的输入输出

9 
......... 
**.*..... 
....*.... 
....*.... 
.....*... 
......... 
......... 
.*....... 
.**.*.... 
....xxxxx 
....xxxxx 
xxxx.xxxx 
xxxx.xxxx 
xxxxx.xxx 
xxxxxxxxx 
xxxxxxxxx 
x.xxxxxxx 
.....xxxx



你可能感兴趣的:(BJTU1113扫雷问题)