Я пытаюсь написать функцию, которая вычисляет эвристический разрыв.Ниже мой код:
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string direction = "backward";
string state_string = "012345";
string goal_state_string = "125430";
int n = 3;
string ignored_pancakes;
int gap = 0;
state_string += to_string(state_string.length());
unsigned int goal_state_index;
goal_state_string += to_string(goal_state_string.length());
if (direction == "forward")
{
for (unsigned int i = 0; i < n; i++)
{
ignored_pancakes += goal_state_string[i];
}
}
else
{
for (unsigned int i = 0; i < n; i++)
{
ignored_pancakes += state_string[i];
}
}
for (int i = 0; i < state_string.length(); i++)
{
if ((ignored_pancakes.find(state_string[i + 1]) != string::npos) or (ignored_pancakes.find(state_string.at(i)) != string::npos))
{
continue;
}
if (abs(goal_state_string.find(state_string[i])-goal_state_string.find(state_string[i+1])!=1)){
gap++;
}
cout << state_string.at(i) << "\t" << state_string.at(i + 1) << endl;
}
// cout << state_string << endl;
cout << ignored_pancakes << endl;
cout << gap << endl;
}
Вывод, который я ожидаю, выглядит следующим образом:
3 4
4 5
5 6
012
2
Но то, что выводится на печать:
3 4
4 5
5 6
Страннокогда я закомментирую строку, которая говорит:
cout << state_string.at(i) << "\t" << state_string.at(i + 1) << endl;
Вывод:
012
2
Почему это выводит на печать что-то совершенно другое в зависимости от этой строки, которая кажется неактуальной.