题意:给定一个有向图,求出图中所有长度在[3,7]之间的环。
输入信息: 输入为包含资金流水的文本文件,每一行代表一次资金交易记录,包含本端账号ID, 对端账号ID, 转账金额,用逗号隔开。
- 本端账号ID和对端账号ID为一个32位的无符号整数
- 转账金额为一个32位的无符号整数
- 转账记录最多为28万条
- 每个账号平均转账记录数< 10
- 账号A给账号B最多转账一次
举例如下,其中第一行[1,2,100]表示ID为1的账户给ID为2的账户转账100元:
1,2,100
1,3,100
2,4,90
3,4,50
4,1,95
...
输出信息: 输出信息为一个文件,包含如下信息: 第一行输出:满足限制条件下的循环转账个数。 说明:数据集经过处理,会保证满足条件的循环转账个数小于300万。 第二行开始:输出所有满足限制条件的循环转账路径详情。 输出循环转账路径要按照指定排序策略进行排序:每条循环转账中,ID(ID转为无符号整数后)最小的第一个输出;总体按照循环转账路径长度升序排序;同一级别的路径长度下循环转账账号ID序列,按照字典序(ID转为无符号整数后)升序排序。
举例如下:
4
1,2,4
1,3,4
4,6,7
1,2,5,4
限制条件:
循环转账的路径长度最小为3(包含3)最大为7(包含7),例如账户A给账户B转账,账户B给账户A转账,循环转账的路径长度为2,不满足循环转账条件。
另: 官网补充: 路径中不允许出现重复结点, 即"1->2->3->2->1"不满足要求.
python: 评测版本为3.7, 除原生库外, 外部库只允许使用numpy, 版本为1.17.2
要点:
- 找环的逻辑要完整, 不要漏,不要多
ps:评测时若返回信息类似: "17% THE RESULT IS INCORRECT.", 则表明在对比结果文件时约17%处发生错误, 请检查找环的逻辑是否完整或者是否正确排序 - 尽量减少搜索的范围, 因为28w数据构成的图如果层层dfs, 运算数量级非常大, 若运行太久可能会报超时: "0% TIME LIMIT EXCEED" , 可能是dfs太久或者陷入局部死循环了
- 列表索引/字典索引等如果不能保证合理索引, 建议加判断或者使用try语句, 因为程序运行报错的话将没有结果文件, 自然不会有分数, 返回信息为:"0% RUNTIME ERROR. " (如果路径不对, 也可能报这个错误, 所以提交前千万要检查一下, 不然浪费一天挺亏的)
附上测试数据集链接:
https://github.com/liusen1006/2020HuaweiCodecraft-TestData.git
自己对比result文件时推荐使用vscode, 对比一目了然, 命令行操作:
code --diff [file1] [file2]
Finally, python/java/c++玩家不分区, 所以深感python玩不转, 总结一下就拜拜了. 早点开学吧 💔💔💔