本文主要是介绍18945 小团的配送团队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
### 思路
1. **建图**:将订单视为图的节点,已知关系视为图的边,构建无向图。
2. **连通分量**:使用深度优先搜索(DFS)或广度优先搜索(BFS)找到图中的所有连通分量。
3. **排序**:对每个连通分量中的订单编号进行排序。
4. **输出**:按最小订单编号的顺序输出每个连通分量。
### 伪代码
1. 读取输入的订单数量n和关系数量m。
2. 构建图的邻接表表示。
3. 使用DFS/BFS找到所有连通分量。
4. 对每个连通分量中的订单编号进行排序。
5. 按最小订单编号的顺序输出每个连通分量。
### C++代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>using namespace std;void dfs(int node, vector<vector<int>>& graph, vector<bool>& visited, vector<int>& component) {visited[node] = true;component.push_back(node);for (int neighbor : graph[node]) {if (!visited[neighbor]) {dfs(neighbor, graph, visited, component);}}
}int main() {int n, m;cin >> n >> m;vector<vector<int>> graph(n + 1);for (int i = 0; i < m; ++i) {int a, b;cin >> a >> b;graph[a].push_back(b);graph[b].push_back(a);}vector<bool> visited(n + 1, false);vector<vector<int>> components;for (int i = 1; i <= n; ++i) {if (!visited[i]) {vector<int> component;dfs(i, graph, visited, component);sort(component.begin(), component.end());components.push_back(component);}}sort(components.begin(), components.end(), [](const vector<int>& a, const vector<int>& b) {return a[0] < b[0];});cout << components.size() << endl;for (const auto& component : components) {for (int order : component) {cout << order << " ";}cout << endl;}return 0;
}
这篇关于18945 小团的配送团队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!