Codeforces - two buttons - help needed

i really cant understand how to do this problem using graphs and dfs.
can anyone please explain it to me?
thankss.
here is the link

anyone???

void solve()
{
	int n, m;
	sc(n), sc(m);  // inputs
	vector<int> mark(N + 10, -1);  // N is the max-limit 1e4
	mark[n] = 0; // zero steps to reach 'n'
	queue<pair<int, int>>q;
	q.push({n, 0});
	while (!q.empty()) {
 
		auto top = q.front();
		q.pop();
		if (top.F * 2 <= N && mark[top.F * 2] == -1) {
			mark[top.F * 2] = top.S + 1;
			q.push({top.F * 2, top.S + 1});
		}
		if (top.F - 1 >= 0 && mark[top.F - 1] == -1) {
			mark[top.F - 1] = top.S + 1;
			q.push({top.F - 1, top.S + 1});
		}
	}
	cout<<mark[m]<<endl; 
}

mark each step only once

Here is a simple implementation with all 3 possible cases:

2 Likes