https://www.acmicpc.net/problem/1525


우선은 아래와 같이 코드를 짜보려고 시도했습니다.


-----------------------------------------------------------

#include <stdio.h>

#include <set>

#include <queue>

#include <math.h>

using namespace std;

set <int> Set;

queue <pair<int,int>> Q;

vector <int> v+={{},{2,4},{1,3,5},{2,6},{1,5,7},{2,4,6,8},{3,5,9},{4,8},{5,7,9},{6,8}};

int A,ans=123456789;

char c;

int Find(int num){

    for(int i=9;i>=1;i--){

        if(num%10==9)return i;

        num/=10;

    }

}

int make(int num,int x,int i){

    int i_num=num%int(pow(10,10-i))/pow(10,9-i);

    return num-(9-i_num)*int(pow(10,9-x))+(9-i_num)*int(pow(10,9-i));

}

void bfs(){

    Q.push({A,0});

    while(!Q.empty()){

        auto[num,dist]=Q.front();

        Q.pop();

        int x=Find(num);

        for(int i:v[x]){

            int a=make(num,x,i);

            //if a: not visited

            //으음....

        }

    }

}

int main(){

    for(int i=0;i<9;i++){

        scanf(" %c",&c);

        if(c=='X')A=A*10+9;

        else A=A*10+(int(c)-48);

    }

    bfs();

}

-----------------------------------------------------------



여기서 저 주석된 "으음..." 부분에 뭘 넣어야 할지 모르겠습니다.


123456789~987654321을 전부 배열에 넣고 방문 여부를 확인할 수는 없을 것 같아서 std::map이나 std::set을 사용하려고 했는데
[몇 번 만에 도착할 수 있다] + [퍼즐의 위치 정보] 이 두 개를 동시에 저장할 수 있는 방법은 없나요?

map이나 set을 pair로 만들어서 하고 싶은데 막상 그러자니 방문했다는 정보를 저장하는 방법을 모르겠네요.
도와주십시오!! 부탁드립니다.