算法基础之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)
结果显示:
问题描述:
问题分析:
程序代码:# -*- 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)
结果显示:
相关文章推荐
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 算法基础之python实现贪心算法中圣诞老人分糖果问题和二分查找算法中烘干衣服问题
- 算法基础之python实现贪心算法中的雷达安装问题和二分法中誊抄书籍问题
- 算法基础之python实现枚举法中的熄灯问题
- 算法基础之python实现深度优先搜索的数独问题
- 算法基础之python实现枚举法中的讨厌的青蛙的问题
- 算法基础之python实现递归法中棋盘分割问题
- 算法基础:整数拆分问题(Golang实现)
- 分组Top N问题(一) - java实现Top n算法基础
- python实现基础排序算法之(插入排序)
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- 深度优先搜索1-城堡问题(算法基础 第6周)
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- Python 算法基础 排序实现
- 算法与数据结构基础系列(一): 链表的常见问题分析及实现
- 算法基础:排列组合问题-全排列(Golang实现)
- 《机器学习实战》——k-近邻算法Python实现问题记录
- python实现基础排序算法之(冒泡排序)
- python实现KNN算法中遇到的问题