in this program i use the Breadth-first algorithms to solve transposition Puzzle Games, each node has four derection to move, and in the path[], i record each of the state,when the aim matrix has been found, get out of the program, but found that process into the cycle of loop and did not get out: (

some error with the red part in my program????/

Code:#include<iostream> using namespace std; const int N = 3; #define blank 0 //record every matrix in the transform path step by step to the aim struct node { int nodesun[N][N]; int pre; int x, y;//record the blank's place } path[4000]; int zx[4] = { -1, 0, 1, 0 }; int zy[4] = { 0, -1, 0, 1 }; int front, rear; int desti[N][N];//the aim matrix //check the state of the one in the path array int detect(struct node *p) { int i, j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) if (p->nodesun[i][j] != desti[i][j]) return 0; return 1; } //print the change state void printlj() { int tempt; int i, j; tempt = rear; while (tempt != 0) { for (i = 0; i < N; i++) for (j = 0; j < N; j++) { cout << path[tempt].nodesun[i][j] << " "; if (j == N - 1) cout << endl; } tempt = path[tempt].pre; cout << endl; } } int main() { int i, j, m, n, f; int ii,jj; int temp, find = 0; front = rear = 1; path[1].pre = 0; path[1].y = 2; path[1].x = 2; //initialize the two matrix /* the begin matrix is like: 5 8 7 1 2 4 3 6 the aim matrix is like: 1 2 3 4 5 6 7 8 */ int index = 0; int a[9] = { 5, 8, 7, 1, 2, 4, 3, 6, 0 }; for (i = 0; i < N; i++) for (j = 0; j < N; j++) { path[1].nodesun[i][j] = a[index++]; desti[i][j] = index; } desti[2][2] = blank; path[1].nodesun[2][2] = blank; while (front <= rear && !find) { m = path[front].x; n = path[front].y; for (f = 0; f < 4; f++) { ii = m + zx[f]; jj = n + zy[f]; if (ii >= 0 && ii < N && jj >= 0 && jj < N) { rear++; //path[rear] = path[front]; for (i = 0; i < N; i++) for (j = 0; j < N; j++) path[rear].nodesun[i][j] = path[front].nodesun[i][j]; path[rear].nodesun[m][n] = path[front].nodesun[ii][jj]; path[rear].nodesun[ii][jj] = blank; path[rear].pre = front; path[rear].x = ii; path[rear].y = jj; if (detect(&path[rear])) { cout<<"find"<<endl; printlj(); find = 1; break; } } } front++; } cout<<"end OK"<<endl; return 0; }