您的位置:首页 > 编程语言 > Python开发

算法基础之python实现深度优先搜索中城堡问题

2018-03-16 16:34 549 查看
一、城堡问题
问题描述:





问题分析:



程序代码:# -*- coding: utf-8 -*-
"""
Created on Fri Mar 16 10:36:12 2018

@author: lizihua

题目:根据城堡地形图,计算城堡一共多少间房间,最大房间有多大
城堡被分成m*n个方块,每个方块可以有0~4面墙
输入要求:第一行输入m,n
接下来的输入行中,每个方块用数字描述,表示方块周围的墙
其中,1代表西墙;2代表北墙;4代表东墙;8代表南墙
若第一个方块是11,(其二进制数为1011(对应:西北东南;1代表有墙,0代表无墙))
输入时至少保证有两个房间
输出要求:
输出城堡房间数及最大房间的方块数
"""
import numpy as np

#输入方块的行数R和列数C
RC=input("请输入方块的行数和列数:").split(' ')
RC = list(map(int, RC))
R=RC[0]
C=RC[1]

rooms=np.zeros((R,C),dtype=int)
color=np.zeros((R,C),dtype=int)
for i in range(R):
rooms[i]=input("请输入第"+str(i+1)+"行数值:").split(' ')
#将rooms中的元素转换为整型
rooms[i] = list(map(int, rooms[i]))

#print(rooms)

roomnum=0
maxRoomArea=0
def Dfs(i,j):
global roomnum
global roomArea
if color[i][j]!=0:
return
roomArea+=1
color[i][j]=roomnum
#向西走
if rooms[i,j]&1==0:
Dfs(i,j-1)
#向北走
if rooms[i,j]&2==0:
Dfs(i-1,j)
#向东走
if rooms[i,j]&4==0:
Dfs(i,j+1)
#向南走
if rooms[i,j]&8==0:
Dfs(i+1,j)

for i in range(R):
for j in range(C):
if color[i][j]==0:
roomnum+=1
roomArea=0
Dfs(i,j)
maxRoomArea=max(roomArea,maxRoomArea)

print("房间数量:",roomnum)
print("最大房间的方块数:",maxRoomArea)
print(color)
结果显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法基础