解题思路:

注意事项:

参考代码:

#输入站点数和通道数
n,m=map(int,input().split())
#定义图的邻接矩阵
table=[[0]*(n) for _ in range(n)]
#定义是否访问过改节点的矩阵(是为True)
flag=[False for _ in range(n)]
#将图中相连的边设为1
for _ in range(m):
    i,j=map(int,input().split())
    table[i-1][j-1],table[j-1][i-1]=1,1
u,v=map(int,input().split())
#输入起点后重点(因为是从0开始,所有要减1)
u,v=u-1,v-1
#计算成功连通的各个路径的每个节点的访问次数
s_path=[0 for _ in range(n)]
def dfs(start,end):
    global s_path
    #start==end说明已经找到路径了
    if start==end:
        for i in range(n):
            #在每次找到连通路径的时候,都会对访问过的点记为True
            if flag[i]==True:
                s_path[i]+=1
        return
    for i in range(n):
        #如果存在边并且没有访问过
        if table[start][i]==1 and not flag[i]:
            #设置为访问过
            flag[i]=True
            #继续遍历
            dfs(i,end)
            #回溯
            flag[i]=False
dfs(u,v)
#如果找到了路径,最后肯定i==end,所以每次end这个节点都会加1,最终结果就是和
#end次数相同的减去end本身
print(s_path.count(s_path[v])-1)


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论