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;
}

 

posted @ 2012-12-05 22:55  tsubasa_wp  阅读(1711)  评论(0编辑  收藏  举报