110.字符串接龙
from collections import deque
def findshortestpath(strlist, beginstr, endstr):
que = deque()
visited = {}
que.append(beginstr)
visited[beginstr]=1
result = 0
while que:
cur = que.popleft()
result = visited[cur]
for i in range(len(cur)):
new_word= list(cur)
for j in range(26):
new_word[i]=chr(ord('a')+j)
new_word = ('').join(new_word)
if new_word==endstr:
print(result+1)
return
if new_word in strlist and new_word not in visited.keys():
visited[new_word]=result+1
que.append(new_word)
new_word = list(new_word)
print(0)
if __name__=='__main__':
n = int(input())
beginstr, endstr = input().split()
strlist = []
for i in range(n):
strlist.append(input())
findshortestpath(strlist, beginstr, endstr)
105.有向图的完全可达性
def dfs(x, graph, visited):
if visited[x]==1:
return
visited[x]=1
for y in range(n):
if graph[x][y]==1:
dfs(y,graph,visited)
return
if __name__=='__main__':
n,k = map(int, input().split())
graph =[[0]*n for _ in range(n)]
for i in range(k):
x, y=map(int, input().split())
graph[x-1][y-1]=1
visited=[0]*n
dfs(0,graph,visited)
if sum(visited)==n:
print(1)
else:
print(-1)
106. 岛屿的周长
n,m=map(int, input().split())
graph = []
for _ in range(n):
row = list(map(int, input().split()))
graph.append(row)
c=0
for i in range(n):
for j in range(m):
if graph[i][j]==1:
directions=[[1,0],[-1,0],[0,1],[0,-1]]
for k in range(4):
x0,y0=directions[k]
new_x=i+x0
new_y=j+y0
if new_x==-1 or new_x==len(graph) or new_y==-1 or new_y==len(graph[0]) or graph[new_x][new_y]==0:
c+=1
print(c)