
Given a snake and ladder board of order 5x6, find the minimum number of dice throws required to reach the destination or last cell (30th cell) from source (1st cell).
For Input:
2
2
20 11 21 3
2
12 18 3 19
Your Output is:
5
3
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, x, y;
cin >> n;
unordered_map < int, int > mp;
for (int i = 0; i < n; ++i) {
cin >> x >> y;
mp[x] = y;
}
queue < pair < int, int > > q;
int a[31];
memset(a, 0, sizeof(a));
a[1] = 0;
q.push(make_pair(1, 0));
int res = 0, f = 0;
while (!q.empty() && a[30] == 0) {
auto p = q.front();
x = p.first, y = p.second;
++y;
q.pop();
for (int i = 1; i <= 6; ++i) {
if (a[i + x] == 0) {
if (mp.find(i + x) == mp.end()) {
q.push(make_pair(i + x, y));
a[i + x] = 1;
} else {
if (a[mp[i + x]] == 0) {
q.push(make_pair(mp[i + x], y));
a[mp[i + x]] = 1;
}
}
}
if (a[30] == 1) {
f = 1;
res = y;
break;
}
}
if (f || a[30] == 1) break;
}
cout << res << endl;
}
return 0;
}