zoukankan      html  css  js  c++  java
  • 算法提高---扫雷

    问题描述
      扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100
    输入格式
      输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用'*'表示。当n=m=0时输入结束。
    输出格式
      对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的'.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。
    样例输入
    4 4
    *...
    ....
    .*..
    ....
    3 5
    **...
    .....
    .*...
    0 0
    样例输出
    Field #1:
    *100
    2210
    1*10
    1110

    Field #2:
    **100
    33200
    1*100
    (注意两个矩阵之间应该有一个空行,由于oj的格式化这里不能显示出来)
    数据规模和约定
      0<n,m<=100
    #include <stdio.h>
    #include <string.h>
    #define N 100
    
    int Mine_Count[N][N];
    char Mine[N][N];
    
    int main(){
        int n,m,i,j,count;
        count = 0;
        while(scanf("%d%d",&n,&m) && !(n == 0 && m == 0)){
            count  ++;
            memset(Mine_Count,0,sizeof(Mine_Count)); //每轮都要初始化 
            for(i=0;i<n;i++){
                getchar();
                for(j=0;j<m;j++){
                    scanf("%c",&Mine[i][j]);
                    if(Mine[i][j] == '*'){
                        if(i == 0){
                            if(j == 0){
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i+1][j+1] += 1;
                            }
                            else if(j == m-1){
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i+1][j-1] += 1;
                            }
                            else{
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i+1][j-1] += 1;
                                Mine_Count[i+1][j+1] += 1;
                            }
                        }
                        else if(i == n-1){
                            if(j == 0){
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i-1][j+1] += 1;
                            }
                            else if(j == m-1){
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i-1][j-1] += 1;
                            }
                            else{
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i-1][j-1] += 1;
                                Mine_Count[i-1][j+1] += 1;
                            }
                        }
                        else{
                            if(j == 0){
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i-1][j+1] += 1;
                                Mine_Count[i+1][j+1] += 1;
                            }
                            else if(j == m-1){
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i-1][j-1] += 1;
                                Mine_Count[i+1][j-1] += 1;
                            }
                            else{
                                Mine_Count[i-1][j] += 1;
                                Mine_Count[i+1][j] += 1;
                                Mine_Count[i][j-1] += 1;
                                Mine_Count[i][j+1] += 1;
                                Mine_Count[i-1][j-1] += 1;
                                Mine_Count[i-1][j+1] += 1;
                                Mine_Count[i+1][j-1] += 1;
                                Mine_Count[i+1][j+1] += 1;
                            }
                        }
                    
                    }
                }
            }
            printf("Field #%d:
    ",count);
            for(i=0;i<n;i++){
                for(j=0;j<m;j++){
                    if(Mine[i][j] == '*') 
                        printf("*");
                    else{
                        printf("%d",Mine_Count[i][j]); 
                    } 
                }
                puts(""); 
            } 
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    Android开发技术周报 Issue#82
    Android开发技术周报 Issue#81
    Android开发技术周报 Issue#83
    Android开发技术周报 Issue#84
    Android开发技术周报 Issue#85
    Android开发技术周报 Issue#86
    Android开发技术周报 Issue#87
    Android开发技术周报 Issue#88
    Android开发技术周报 Issue#89
    Linux React-Native Android开发环境搭建(附报错信息)
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/6233537.html
Copyright © 2011-2022 走看看