开发者
资源
Python编程知识扫雷
Python编程知识扫雷
发表于2024/07/18
265k2

扫雷

题目描述

大家都玩过扫雷游戏吧,给定一个矩形方正区域,里面有若干个地雷,用鼠标点击,点击后如果出现一块区域,那么说明这个点周围8个方向没有地雷,如果出现数字,数字是几,那么就表示这个区域周围8个方向有几颗地雷,如果是地雷,那你很不幸就输掉了。 现在告诉你这个图里地雷的分布,你来给出每个点上面的数字应该是多少?

输入 数据的第一行有2个整数n, m(1 <= n, m <= 50),表示一个n * m的区域,n行m列,接下来n行每行有一个长度为m的字符串,字符串只包含2种字母,”.”和”X”,其中”.”表示这个地方不是地雷,”X”表示这个地方是地雷。

输出 请输出n行内容,每一行是一个长度为m的字符串,由数字和符号”X”组成,如果这个点不是地雷,那么就表示这个点周围有几颗地雷,否则这个点存放符号”X”,表示这个点是地雷。

样例 输入样例 1

3 5 ..... ..XX. ..... 输出样例 1

01221 01XX1 01221

代码实现

def myList(m):    #输入列表:获取输入的符号
    ls=[]
    print('请依次输入每行的地图:')
    for j in range(m):
        s=input()
        ll=[]
        for i in s:
            ll.append(i)
        ls.append(ll)
    return ls

def result(ls):         #初始状态应该对应输入列表,除了对应的位置值为X ,其它的位置初始值均为0
    rs=ls
    for i in range(len(ls)):
        for j in range(len(ls[i])):
            if ls[i][j]=='X': rs[i][j]='X'
            else: rs[i][j]=0
    return (rs)

def check(m,n,ls):           #通过检查输入列表中[i][j]点是否为雷,即X,来决定相邻的八个点的值是不是要加1(我是顺时针判断)
    for i in range(m):
        for j in range(n):
            if ls[i][j]=='X':
                if i-1>=0  and rs[i-1][j]!='X':   # 判断上面是否有雷
                    rs[i-1][j]+=1   
                if i-1>=0 and j+1<n and rs[i-1][j+1]!='X':   # 判断右上角是否有雷
                    rs[i-1][j+1]+=1
                if j+1<n and rs[i][j+1]!='X':      # 判断右边是否有雷
                    rs[i][j+1]+=1
                if i+1<m and j+1<n and rs[i+1][j+1]!='X':     # 判断右下角是否有雷
                    rs[i+1][j+1]+=1
                if i+1<m  and rs[i+1][j]!='X':        # 判断下面是否有雷
                    rs[i+1][j]+=1
                if i+1<m and j-1>=0 and rs[i+1][j-1]!='X':    # 判断左下角是否有雷
                    rs[i+1][j-1]+=1
                if j-1>=0 and rs[i][j-1]!='X':      # 判断左边是否有雷
                    rs[i][j-1]+=1
                if i-1>=0 and j-1>=0 and rs[i-1][j-1]!='X':    # 判断左上角是否有雷
                    rs[i-1][j-1]+=1
            else:
                continue
    return rs

def out(rs):           #将数字列表输出为二维列表
    for s in rs :
        for ss in s:
            print(ss,end='')
        print()
        
m,n=map(int,(input('请输入行和列:').split()))

while True:
    if m==0 and n==0:
        break
    else:
        ls=myList(m)
        rs=result(ls)
        rr=check(m,n,ls)
        print('结果为:')
        out(rs)
        print()
        break

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞