【发布时间】:2021-08-01 10:44:17
【问题描述】:
我正在尝试完成这段代码,现在我遇到了选择排序算法的错误:
error: no matching function for call to
‘swap(const std::vector<int>*, const std::vector<int>*)’
swap(&adj[min_idx], &adj[j]);
和
invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
b = temp;
我必须按图的顶点度数对图进行排序。有人可以帮助我吗?谢谢!
void swap(int *a, int *b) {
int temp;
temp = a;
a = b;
b = temp;
}
void sortGraph(vector<int> const *adj, size_t count) {
int size = count;
//sort by degree, number of children
for (int j = 0; j < size - 1; j++) {
int min_idx = j;
for (int i = j + 1; i < size; i++) {
if (adj[i].size() < adj[min_idx].size())
min_idx = i;
}
swap(&adj[min_idx], &adj[j]);
}
}
void printGraph(std::vector<int> const* adj, size_t count) {
std::vector<size_t> indices;
for (size_t i = 0; i != count; ++i)
{
indices.push_back(i);
}
for (auto index : indices)
{
std::cout << "Vertex " << index << ", degree " << adj[index].size() << '\n';
}
}
void addEdge(vector<int> adj[], int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
int main() {
int V = 5;
vector<int> adj[V];
addEdge(adj, 0, 2);
addEdge(adj, 0, 1);
addEdge(adj, 0, 3);
addEdge(adj, 0, 4);
addEdge(adj, 2, 1);
addEdge(adj, 4, 1);
//printGraph(adj, V);
sortGraph(adj, V);
return 0;
}
【问题讨论】:
标签: c++ sorting const-correctness