分享一个小玩意 真菌UNITE物种分类数据库

bai度网盘分享,如果链接失效,评论或者私信

通过百度网盘:https://pan.baidu.com/s/1_4o1Dk5fKISbcPgR2HmtqA?pwd=7u82 
提取码:7u82

文件内容

此文件是最新的2021.10.05版本

9a0763a04715407db0147f6300c3acf5.png

sh_refs开头的文件是 代表/参考序列

sh_taxonomy开头的文件是  分类信息

k__Fungi;p__Phylum;c__Class;o__Order;f__Family;g__Genus;s__Species
不过建议使用developer的dynamic的俩文件
 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,我可以为你提供一个基于Kruskal算法的C++代码实现,用于求解点云的最小生成树。该代码使用了并查集数据结构来实现Kruskal算法。 以下是代码实现: ```c++ #include <iostream> #include <vector> #include <algorithm> using namespace std; // 定义点结构体 struct Point { int x, y, z; }; // 定义边结构体 struct Edge { int from, to, weight; Edge(int a, int b, int w): from(a), to(b), weight(w) {} }; // 比较函数,用于对边按权重排序 bool cmp(Edge a, Edge b) { return a.weight < b.weight; } // 并查集数据结构 class UnionFind { public: vector<int> parent; vector<int> rank; UnionFind(int n) { parent.resize(n + 1); rank.resize(n + 1); for (int i = 1; i <= n; i++) { parent[i] = i; rank[i] = 1; } } int find(int x) { if (parent[x] != x) { parent[x] = find(parent[x]); } return parent[x]; } void unite(int x, int y) { int px = find(x), py = find(y); if (px == py) return; if (rank[px] < rank[py]) { parent[px] = py; } else { parent[py] = px; if (rank[px] == rank[py]) rank[px]++; } } bool same(int x, int y) { return find(x) == find(y); } }; // 求解点云的最小生成树 vector<Edge> kruskal(vector<Point>& points) { int n = points.size(); vector<Edge> edges; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { int dx = points[i].x - points[j].x; int dy = points[i].y - points[j].y; int dz = points[i].z - points[j].z; int weight = dx * dx + dy * dy + dz * dz; // 求边权重 edges.push_back(Edge(i, j, weight)); } } sort(edges.begin(), edges.end(), cmp); UnionFind uf(n); vector<Edge> ans; for (int i = 0; i < edges.size(); i++) { Edge e = edges[i]; if (!uf.same(e.from, e.to)) { uf.unite(e.from, e.to); ans.push_back(e); } } return ans; } int main() { int n; cin >> n; vector<Point> points(n); for (int i = 0; i < n; i++) { cin >> points[i].x >> points[i].y >> points[i].z; } vector<Edge> ans = kruskal(points); for (int i = 0; i < ans.size(); i++) { cout << ans[i].from << " " << ans[i].to << " " << ans[i].weight << endl; } return 0; } ``` 该代码使用了一个嵌套的循环来生成所有可能的边,并计算它们的权重。然后,使用排序函数对边进行排序,以便将它们按权重从小到大排列。接着,使用Kruskal算法来查找最小生成树。最后,输出生成树的所有边以及它们的权重。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值