A25756. 编程实现: 有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图:这块4*4的农田中有3块独立的农作物区域(红色的3部分)。输入描述:第一行输入两个整数N和M…
填空题
中等
知识点
题目描述
编程实现:
有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。
例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图:

这块4*4的农田中有3块独立的农作物区域(红色的3部分)。
输入描述:
第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间以一个英文逗号隔开
接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间以一个英文逗号隔开
输出描述:
输出一个整数,表示N*M的农田中有几块独立的农作物区域
样例输入:
4,4
R,R,R,X
R,X,R,X
X,X,X,R
R,X,X,X样例输出:
3参考答案
#参考答案1
def dfs(x,y,xf2):
fx=[[0,1],[0,-1],[1,0],[-1,0]]
for i in range(4):
dx=x+fx[i][0]
dy=y+fx[i][1]
if(dx<0 or dx>=n or dy<0 or dy>=m):
continue
if(xf2[dx][dy]==0 or xfs[dx][dy]=='X'):
continue
xf2[dx][dy]=0
dfs(dx,dy,xf2)
return xf2
n,m=input().split(',')
n=int(n)
m=int(m)
xfs=[]
xf2=[]
for i in range(n):
xfs.append(input().split(','))
for i in range(n):
xf2.append([])
for j in range(m):
xf2[i].append(1)
ans=0
for i in range(n):
for j in range(m):
if(xfs[i][j]=='R' and xf2[i][j]):
ans+=1
xf2=dfs(i,j,xf2)
print(ans)
#参考答案2
n, m = eval(input())
r = []
num = 0
def c(x, y):
r[x][y] = 'X'
if x>0:
if r[x-1][y] == 'R':
c(x-1, y)
if x<n-1:
if r[x+1][y] == 'R':
c(x+1, y)
if y > 0:
if r[x][y-1] == 'R':
c(x, y-1)
if y < m-1:
if r[x][y+1] == 'R':
c(x, y+1)
for i in range(n):
t = input().split(',')
r.append(t)
for i in range(n):
for j in range(m):
if r[i][j] == 'R':
num += 1
c(i, j)
print(num)答案解析
评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据;
20分:能正确输出四组数据;
20分:能正确输出五组数据。
上一题
下一题