Language: C++


#include <iostream>
#include <queue>

using namespace std;

class node
{
public:

	node(int a_, int b_, int c_, int cost_)
		: a(a_), b(b_), c(c_), cost(cost_)
	{
	}

	int a;
	int b;
	int c;
	int cost;
};

queue<node> q;

void push(node& n)
{
	if (n.a == n.b && n.b == n.c)
	{
		cout << n.cost << endl;
		exit(0);
	}

	q.push(n);
}

int main()
{
	int a, b, c;
	cin >> a >> b >> c;

	push(node(a, b, c, 0));

	while (!q.empty())
	{
		node n = q.front();
		q.pop();


		if (n.b == n.c) push(node(n.a + 2, n.b, n.c, n.cost + 1));
		if (n.a == n.c) push(node(n.a, n.b + 2, n.c, n.cost + 1));
		if (n.a == n.b) push(node(n.a, n.b, n.c + 2, n.cost + 1));

		if (n.a < n.c && n.b < n.c) push(node(n.a + 1, n.b + 1, n.c, n.cost + 1));
		if (n.a < n.b && n.c < n.b) push(node(n.a + 1, n.b, n.c + 1, n.cost + 1));
		if (n.c < n.a && n.b < n.a) push(node(n.a, n.b + 1, n.c + 1, n.cost + 1));
	}

	return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:40:14: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   40 |         push(node(a, b, c, 0));
      |              ^~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:48:38: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   48 |                 if (n.b == n.c) push(node(n.a + 2, n.b, n.c, n.cost + 1));
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:49:38: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   49 |                 if (n.a == n.c) push(node(n.a, n.b + 2, n.c, n.cost + 1));
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:50:38: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   50 |                 if (n.a == n.b) push(node(n.a, n.b, n.c + 2, n.cost + 1));
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:52:50: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   52 |                 if (n.a < n.c && n.b < n.c) push(node(n.a + 1, n.b + 1, n.c, n.cost + 1));
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:53:50: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   53 |                 if (n.a < n.b && n.c < n.b) push(node(n.a + 1, n.b, n.c + 1, n.cost + 1));
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^
a.cc:54:50: error: cannot bind non-const lvalue reference of type 'node&' to an rvalue of type 'node'
   54 |                 if (n.c < n.a && n.b < n.a) push(node(n.a, n.b + 1, n.c + 1, n.cost + 1));
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:24:17: note:   initializing argument 1 of 'void push(node&)'
   24 | void push(node& n)
      |           ~~~~~~^