by Alvaro » Fri Apr 18, 2008 7:09 am
It's not that hard to read. The formula means that you remove the first number from the list, and since it was a 5, you subtract 1 from the next 5 elements.
In C++:
[syntax="cpp"]#include <iostream>
#include <vector>
std::vector<int> Havel_and_Hakimi(std::vector<int> const &d) {
std::vector<int> result;
for(int i=0;i<d[0];++i)
result.push_back(d[i+1]-1);
for(int i=d[0]+1;i<d.size();++i)
result.push_back(d[i]);
return result;
}
/* Alternative implementation:
std::vector<int> Havel_and_Hakimi(std::vector<int> const &d) {
std::vector<int>::const_iterator b=d.begin();
++b;
std::vector<int> result(b,d.end());
for(int i=0;i<d[0];++i)
--result[i];
return result;
}
*/
int main() {
int a[]={5,5,5,4,3,2,1,1};
std::vector<int> d(a,a+sizeof(a)/sizeof(*a));
std::vector<int> x=Havel_and_Hakimi(d);
for(int i=0;i<x.size();++i)
std::cout << x[i] << ' ';
std::cout << '\n';
}
[/syntax]