Ну и трудный день конечно сегодня, чувствую весь тес с++ в моих вопросах, но таков путь(кому интересно с конем справился)
ну так вот есть задача.
Витя хочет придумать новую игру с числами. В этой игре от игроков требуется преобразовывать четырехзначные числа не содержащие нулей при помощи следующего разрешенного набора действий:
1. Можно увеличить первую цифру числа на 1, если она не равна 9.
2. Можно уменьшить последнюю цифру на 1, если она не равна 1.
3. Можно циклически сдвинуть все цифры на одну вправо.
4. Можно циклически сдвинуть все цифры на одну влево.
Входные данные:
Во входном файле содержится два различных четырехзначных числа, каждое из которых не содержит нулей.
Выходные:
Программа должна вывести последовательность четырехзначных чисел, не содержащих нулей. Последовательность должна начинаться первым из данных чисел и заканчиваться вторым из данных чисел, каждое последующее число в последовательности должно быть получено из предыдущего числа применением одного из правил. Количество чисел в последовательности должно быть минимально возможным
И код вроде правильный, а вывод не выходит. Просто нету. ЗНаю что вывод долгий
Ну и сам код собственно говоря
#include <bits/stdc++.h>
using namespace std;
int sk;
vector<int> xcor;
vector<int> ycor;
int f1(int num){
if (num / 1000 != 9){
return num + 1000;
}
else return num;
}
int f2(int num){
if(num % 10 != 1){
return num - 1;
}
return num;
}
int f3(int num){
int sum = 0;
sum += 1000 * (num % 10);
sum +=100 * (num / 1000);
sum += 10 * ((num % 1000) / 100);
sum += num % 10;
return sum;
}
int f4(int num){
int sum = 0;
sum += ((num % 1000) / 100);
sum += ((num % 100) / 10);
sum += 10 * (num % 10);
sum += num / 1000;
return sum;
};
struct ch
{
int num, dist, pred;
ch(int num, int dist = 0, int pred = 0) : num(num), dist(dist), pred(pred){}
};
vector<ch> ans;
int BFS(ch st)
{
queue<ch> q;
q.push(st);
while (!q.empty())
{
ch node = q.front();
q.pop();
int newnum = 0;
int num = node.num;
int dist = node.dist;
if (num == sk)
return dist;
else{
newnum = f1(num);
if (newnum != sk) {
q.push({newnum, dist + 1, num});
ans.push_back({newnum, dist + 1, num});
}
else{
return dist + 1;
}
newnum = f2(num);
if (newnum != sk) {
q.push({newnum, dist + 1, num});
ans.push_back({newnum, dist + 1, num});
}
else{
return dist + 1;
}
newnum = f3(num);
if (newnum != sk) {
q.push({newnum, dist + 1, num});
ans.push_back({newnum, dist + 1, num});
}
else{
return dist + 1;
}
newnum = f4(num);
if (newnum != sk) {
q.push({newnum, dist + 1, num});
ans.push_back({newnum, dist + 1, num});
}
else{
return dist + 1;
}
}
}
return 10000;
}
void vyvod(int num){
if (num == 0){
return;
}
for (int i = 0; i < ans.size(); ++i){
if(ans[i].pred == num){
vyvod(ans[i].pred);
cout << num;
}
}
}
int main()
{
int num;
cin >> num >> sk;
ch start = {num, 0, 0 };
cout<<BFS(start) - 2;
vyvod(sk);
return 0;
}
По переменным ск то что ищем, num начальное число, pred-предок числа