代码随想录算法训练营DAY59|110.字符串接龙、105.有向图的完全可达性、106. 岛屿的周长

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值