BFS迷宫寻路
找一条从起点到终点的最短移动序列。
首先计算出起点到每个节点的最短距离
(未完待续)
#define SIZE 6 int mat[SIZE][SIZE], vis[SIZE][SIZE]; int que[SIZE*SIZE][2]; int addNode(int x0, int y0, int x, int y, int rear) { if (( x < 0 ) || ( y < 0 ) || ( x >= SIZE ) || ( y >= SIZE )) return rear; if (( mat[x][y] < 0 )||( vis[x][y])) return rear; vis[x][y] = 1; mat[x][y] = mat[x0][y0] + 1; que[rear][0] = x; que[rear][1] = y; return ++rear; } void bfs() { int frount = 0, rear = 1; que[0][0] = 0; que[0][1] = 0; vis[0][0] = 1; while (frount < rear) { int x = que[frount][0]; int y = que[frount][1]; rear = addNode(x, y, x+1, y, rear); rear = addNode(x, y, x-1, y, rear); rear = addNode(x, y, x, y+1, rear); rear = addNode(x, y, x, y-1, rear); frount++; } for ( int i = 0; i < SIZE; i++) { for ( int j = 0; j < SIZE; j++ ) { printf("%d ", mat[i][j]); } printf("\n"); } } int main () { //char grid[SIZE*SIZE + 1]; char *grid = "001000010000010110010000000100000000"; //while(scanf("%s", grid) == 1) { memset(mat, 0, sizeof(mat)); memset(vis, 0, sizeof(vis)); memset(que, 0, sizeof(que)); for ( int i = 0; i < SIZE; i++ ) for ( int j = 0; j < SIZE; j++ ) mat[i][j] = ( grid[i*SIZE + j] == '1' ) ? -1 : 0; bfs(); //} system("PAUSE"); return 0; }