#include #include #include #include using namespace std; const long int SZ = 876543210, Final = 123456780; list Q,Steps; vector Visited(876543210, false); inline int getDigit(long int num, int pos) { long int tmp = num/(long int)pow10(pos-1); return tmp%10; } void enQChildren (long int state, long int depth) { int pos, digit; long int tmp, child; for (pos=1, tmp=state; tmp%10!=0; pos++, tmp/=10) {} if(pos>3) { digit = getDigit(state, pos-3); child = state + digit*((long int)pow10(pos-1)) - digit*((long int)pow10(pos-4)); Q.push_back(child); Steps.push_back(depth+1); } if(pos<7) { digit = getDigit(state, pos+3); child = state + digit*((long int)pow10(pos-1)) - digit*((long int)pow10(pos+2)); Q.push_back(child); Steps.push_back(depth+1); } if(pos%3!=0) { digit = getDigit(state, pos+1); child = state + digit*((long int)pow10(pos-1)) - digit*((long int)pow10(pos)); Q.push_back(child); Steps.push_back(depth+1); } if(pos%3!=1) { digit = getDigit(state, pos-1); child = state + digit*((long int)pow10(pos-1)) - digit*((long int)pow10(pos-2)); Q.push_back(child); Steps.push_back(depth+1); } } void printQ() { list::iterator iter; for (iter = Q.begin(); iter != Q.end(); iter++) cout<<*iter<<" "; cout<>ch; if(state == Final) return steps; else if(!Visited[state]) { enQChildren(state, steps); Visited[state] = true; } Q.pop_front(); Steps.pop_front(); } return -1; } int main() { long int start=0, ans; int tmp; for (int i=0; i<9; i++) { cin>>tmp; start = start*10+tmp; } ans = BFS(start); if(ans == -1) cout<<"No"<