京东消消乐

线下跑几个例子暂时没发现问题...记录一下
#消消乐

def gravity(grid,visited):
    # print('before:',grid)
    for col in range(5):
        cnt=0
        for row in range(4,-1,-1):
            if grid[row][col]=='x':
                cnt+=1
            elif cnt>0:
                grid[row+cnt][col]=grid[row][col]
                grid[row][col]='x'
                visited[row][col],visited[row+cnt][col]=visited[row+cnt][col],visited[row][col]
    return grid

def judge(grid,i,j):
    if i<3 and grid[i+1][j]==grid[i][j] and grid[i+2][j]==grid[i][j]:
        return True
    if j<3 and grid[i][j+1]==grid[i][j] and grid[i][j+2]==grid[i][j]:
        return True
    if i<4 and j<4 and grid[i+1][j]==grid[i][j] and grid[i][j+1]==grid[i][j]:
        return True
    if i<4 and j<4 and grid[i+1][j]==grid[i][j] and grid[i+1][j+1]==grid[i][j]:
        return True
    if i>=1 and j>0 and grid[i][j-1]==grid[i][j] and grid[i-1][j]==grid[i][j]:
        return True
    return False

while 1:
    try:
        grid=[]
        for row in range(5):
            line=list(map(int,input().split()))
            grid.append(line)
        visited=[[0 for _ in range(5)]for _ in range(5)]
        direction=[[0,1],[1,0],[-1,0],[0,-1]]
        for k in range(5):
            for g in range(5):
                que = [[k, g]]
                num = grid[k][g]
                if num=='x' or visited[k][g] or not judge(grid,k,g):
                    continue
                else:
                    flag=0
                    while que:
                        i,j=que.pop(0)
                        for x,y in direction:   #满足两个以上则可以消除
                            if i+x>=0 and j+y>=0 and i+x<5 and j+y<5 and not visited[i+x][j+y] and grid[i+x][j+y]==num:
                                visited[i+x][j+y]=1
                                grid[i+x][j+y]='x'
                                flag+=1
                                que.append([i+x,j+y])
                    if flag>0:
                        visited[k][g]=1
                        grid[k][g]='x'
                        grid=gravity(grid,visited)
        print(grid)
        cnt=25
        for i in range(5):
            cnt-=grid[i].count('x')
        print(cnt)

    except:
        break


#京东#
全部评论

相关推荐

#牛客在线求职答疑中心#&nbsp;该游戏是一个8*8的方格矩阵,每个方格有一种颜色:红色、蓝色或绿色。小红每次可以选择一个方格,将该方格和连通块上所有和该方格颜色相同的方格一起消除。之后小红可以选择一个下落方向(上、下、左或者右),使矩阵中所有方格朝着一个方向下落,把空隙填补上对于一局游戏而言,将要填补的方格颜色是预置好了的。也就是说,当小红做出一个操作、消除了方格之后,将要填补的方格是已知的。举个例子,对于一个3*3的矩阵而言,假设待填补的颜色是三行字符串:rbbbgrgrbrrrbg......&nbsp;brgbbgrgrbbbbr......&nbsp;rbgbgrbgrgrggr......&nbsp;初始矩阵是:&nbsp;bbr&nbsp;gbb&nbsp;brg&nbsp;小红初始选择了(2,2)坐标。若小红选择向上落,那么矩阵变成:&nbsp;grr&nbsp;b*g&nbsp;***&nbsp;其中*代表空格。之后第一个字符串的第一个字符填补进第一列,第二个字符串的前两个字符依次填补进第二列,第三个字符串的第一个字符填补进第三列。然后矩阵变成:&nbsp;grr&nbsp;bbg&nbsp;rrr&nbsp;待填补的三个字符串变成:&nbsp;bbbgrgrbrrrbg......&nbsp;gbbgrgrbbbbr......&nbsp;bgbgrbgrgrggr.....&nbsp;至此第一次操作完毕。对于一个8*8的矩阵,共有8个待填补字符串。向上落、向下落的话,八个字符串依次填补第一列、第二列..第八列。向左落、向右落的话,八个字符串依次填补第一行、第二行....第八行。小红给出了每次操作的坐标和下落方向,她想知道每次操作可以消除多少方格?&nbsp;输入描述第一行输入一个正整数&nbsp;几,代表小红的操作次数。接下来的8行,每行输入一个长度为8的字符串,代表消消乐游戏的初始棋盘接下来的8行,每行输入一个长度为8*几的字符串,代表8个待填补字符串。接下来的n&nbsp;行,每行输入两个正整数&nbsp;心,¼和一个字符&nbsp;0p,代表小红选择的坐标(Ii,y)和下落方向op。请注意,坐标是从1开始到8,并非从0开始到7。数据范围:&nbsp;1&nbsp;≤n≤&nbsp;10000,1&nbsp;≤xi,yi=&amp;lt;8所有表示格子的字符一定是'r'、’g’、'b'三个中的一个,分别表示红色、绿色和和蓝色。&nbsp;op&nbsp;一定是'w'、'a'、's'、'd'四种字符中的一个,分别代表向上落、向左落、向下落、向右落。输出描述输出&nbsp;几&nbsp;行正整数,每行代表每次操作的消除总数量。
点赞 评论 收藏
分享
点赞 4 评论
分享
牛客网
牛客企业服务