[POJ3984]迷宫问题

来源:互联网 发布:mac 允许所有来源 编辑:程序博客网 时间:2024/05/24 03:21

描述

定义一个二维数组:

int maze[5][5] = {    0, 1, 0, 0, 0,    0, 1, 0, 1, 0,    0, 0, 0, 0, 0,    0, 1, 1, 1, 0,    0, 0, 0, 1, 0,};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

输入

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

输出

左上角到右下角的最短路径。


思路:求最短路线肯定是BFS了,代码如下:

#include <iostream>#include <string.h>#include <queue> using namespace std; int map[5][5];int visited[5][5];char direction[5][5]; struct Step{    int x;    int y;    Step(int _x, int _y):x(_x), y(_y){}}; queue<Step> q; void print(){    cout << "(0, 0)" << endl;    int x=0, y=0;    while (x != 4 || y != 4) {        char c = direction[x][y];        if (c == 'u')            x -= 1;        else if (c == 'd')            x += 1;        else if (c == 'l')            y -= 1;        else if (c == 'r')            y += 1;        cout << "(" << x << ", " << y << ")" << endl;    }} int main(){    std::ios::sync_with_stdio(false);    for (int i=0; i<5; i++)        for (int j=0; j<5; j++)            cin >> map[i][j];     memset(visited, 0, sizeof(visited));    q.push(Step(4, 4));    visited[4][4] = 1;    while (!q.empty()) {        Step s = q.front();        if (s.x == 0 && s.y == 0){            print();            return 0;        } else {            if (s.x-1 >=0 && !visited[s.x-1][s.y] && !map[s.x-1][s.y]) {                q.push(Step(s.x-1, s.y));                visited[s.x-1][s.y] = 1;                direction[s.x-1][s.y] = 'd';            }             if(s.y-1 >=0 && !visited[s.x][s.y-1] && !map[s.x][s.y-1]) {                q.push(Step(s.x, s.y-1));                visited[s.x][s.y-1] = 1;                direction[s.x][s.y-1] = 'r';            }            if (s.x+1 <=4 && !visited[s.x+1][s.y] && !map[s.x+1][s.y]) {                q.push(Step(s.x+1, s.y));                visited[s.x+1][s.y] = 1;                direction[s.x+1][s.y] = 'u';            }            if (s.y+1 <=4 && !visited[s.x][s.y+1] && !map[s.x][s.y+1]) {                q.push(Step(s.x, s.y+1));                visited[s.x][s.y+1] = 1;                direction[s.x][s.y+1] = 'l';            }            q.pop();        }    }    return 0;}



0 0
原创粉丝点击