백준(BOJ) 풀이

[백준 14502] 연구소

오호라-노이혼 2019. 11. 13. 18:59

import sys

import time

Tstart = time.time()

def xy(node):
    x=node//n
    y=node%n
    return x,y

def BFS(M, start_node):
    visited = list()
    queue = list()

    queue.append(start_node)

    while queue:
        node = queue.pop(0)
        if node not in visited:
            visited.append(node)
            x=node//n
            y=node%n
            if y!=n-1 and M[node+1]==0: 
                M[node+1]=2
                queue.append(node+1)
            if y!=0 and M[node-1]==0: 
                M[node-1]=2
                queue.append(node-1)
            if x!=m-1 and M[node+n]==0:
                M[node+n]=2
                queue.append(node+n)            
            if x!=0 and M[node-n]==0: 
                M[node-n]=2
                queue.append(node-n) 
     
    return visited

m,n=map(int, sys.stdin.readline().split())

OM=[]
Virus_list_Original=[]
Zero_list=[]
 
for i in range(m):
    OM+=list(map(int, sys.stdin.readline().split()))
    for j in range(n):
        if OM[i*n+j]==2:
            Virus_list_Original.append(i*n+j)
        if OM[i*n+j]==0:
            Zero_list.append(i*n+j)

from itertools import combinations

Mans=0
for k in list(combinations(Zero_list,3)):
    M=OM[:]
    M[k[0]]=1
    M[k[1]]=1
    M[k[2]]=1
 
 
    Virus_list=Virus_list_Original[:]
    while Virus_list:
        sp=Virus_list.pop(0)
        BFS(M,sp)
        
    ans=0
    for i in range(m):
        for j in range(n):
            if M[i*n+j]==0 :
                ans+=1
    if Mans<ans:

        Mans=ans
    
    M[k[0]]=0
    M[k[1]]=0
    M[k[2]]=0    

print("Total Times is", time.time()-Tstart)
print(Mans)