时效性
本篇撰写时间为2021.11.14,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
Windows 10家庭中文版,版本20H2,操作系统内部版本19042.1288
本篇前置:
- ExpRe[4] python[1] 单元测试,算法题对拍
https://www.cnblogs.com/minor-second/p/15549364.html - 大致知道python3中的异常,
try
机制
从一道动规看raise
的常见用法
我们继续做算法设计与分析作业
考虑一个所有元素为正的 n ∗ n n*n n∗n二维数组(邻接矩阵),已知其中有且仅有一条有向回路使得该回路上各权值乘积大于1,试找出该回路。(特别注意可以自己到自己连边,且这样的边也有可能权重大于1)
其实括号提示是我自己加的。有点坑。
粗略编写算法
我们粗略编写如下类似于Floyd算法的程序
def find_loop(n, mat):
max_mat = []
for i in range(n):
max_mat.append(mat[i].copy())
for j in range(n):
max_mat[i][j] = [max_mat[i][j], -1]
loop_start = 0
try:
for k in range(n):
for i in range(n):
for j in range(n):
if max_mat[i][k][0] * max_mat[k][j][0] > max_mat[i][j][0]:
max_mat[i][j][0] = max_mat[i][k][0] * max_mat[k][j][0]
max_mat[i][j][1] = k
if i==j and max_mat[i][j][0] > 1:
loop_start = i
raise StopIteration
except StopIteration