
python
def judge(s1,s2):
count=0
for i in range(len(s1)):
if s1[i]!=s2[i]:
count+=1
return count==1
# 作用:判断两个字符串 s1和 s2是否恰好只有一个字符不同。
# 细节:遍历两个字符串的每个字符,统计不同字符的数量。如果最终计数为 1,则返回 True,否则返回 False。
if __name__=='__main__':
n=int(input())
beginstr,endstr=map(str,input().split())
if beginstr==endstr:
print(0)
exit()
strlist=[]
for i in range(n):
strlist.append(input())
# use bfs
visit=[False for i in range(n)]
queue=[[beginstr,1]]
while queue:
str,step=queue.pop(0)
if judge(str,endstr):
print(step+1)
exit()
for i in range(n):
if visit[i]==False and judge(strlist[i],str):
visit[i]=True
queue.append([strlist[i],step+1])
# 初始化:
# visit数组标记 strlist中的字符串是否已被访问。
# 队列 queue存储待处理的字符串及其当前步数(从 beginstr到该字符串的序列长度)。初始为 [beginstr, 1]。
# BFS 循环:
# 弹出队首元素,得到当前字符串 str和步数 step。
# 如果 str能直接转换到 endstr,则输出 step+1(加上 endstr)并结束。
# 否则,遍历 strlist,找到未访问且与 str相差一个字符的字符串,标记为已访问并入队(步数加 1)。
# 队列为空:说明无法转换,输出 0。
print(0)

python
import collections
path = set() # 纪录 BFS 所经过之节点
def bfs(root, graph):
global path
que = collections.deque([root])
while que:
cur = que.popleft()
path.add(cur)
for nei in graph[cur]:
que.append(nei)
graph[cur] = []
return
# 使用deque作为队列,从根节点开始
# 每访问一个节点,就将其加入path集合
# 遍历当前节点的所有邻居,加入队列
def main():
N, K = map(int, input().strip().split())
graph = collections.defaultdict(list)
for _ in range(K):
src, dest = map(int, input().strip().split())
graph[src].append(dest)
bfs(1, graph)
if path == {i for i in range(1, N + 1)}:
return 1
return -1
if __name__ == "__main__":
print(main())

python
n, m = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
perimeter = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 1: # 陆地
# 检查四个方向
# 上方
if i == 0 or graph[i-1][j] == 0:
perimeter += 1
# 下方
if i == n-1 or graph[i+1][j] == 0:
perimeter += 1
# 左方
if j == 0 or graph[i][j-1] == 0:
perimeter += 1
# 右方
if j == m-1 or graph[i][j+1] == 0:
perimeter += 1
print(perimeter)