经典指数          
原因
1122
浏览数
0
收藏数
 

NowCoder最喜欢游乐场的迷宫游戏,他和小伙伴们比赛谁先走出迷宫。 现在把迷宫的地图给你,你能帮他算出最快走出迷宫需要多少步吗? 输入描述: 输入包含多组数据。每组数据包含一个10*10,由“#”和“.”组成的迷宫。其中“#”代表墙;“.”代表通路。入口在第一行第二列;出口在最后一行第九列。从任意一个“.”点都能一步走到上下左右四个方向的“.”点。 输出描述: 对应每组数据,输出从入口到出口最短需要几步。 输入例子: #.#########........##........##........##........##........##........##........##........#########.##.#########........#########.##........##.#########........#########.##........##.######.#########.# 输出例子: 1630

     举报   纠错  
 
切换
1 个答案

也是一个经典的bfs问题.给定了起点和终点,直接搜就行。

// write your code here cpp

#include

#include

#include

using namespace std;

char mp[25][25];

int sx,sy,maxn;

int dir[4][2]={-1,0,1,0,0,-1,0,1};

struct point {

    int x,y,step;

};

int bfs() {

    queueque;

    point s;

    s.x=0;s.y=1;s.step=0;

    que.push(s);

    mp[s.x][s.y]='#';

    while(!que.empty()) {

        point e=que.front();

        que.pop();

        if(e.x==9&&e.y==8) return e.step;

        for(int i=0;i<4;++i) {

            s.x=e.x+dir[i][0];

            s.y=e.y+dir[i][1];

           

if(s.x>=0&&s.x<10&&s.y>=0&&s.y<10&&mp[s.x][s.y]!='#')

{

                s.step=e.step+1;

                mp[s.x][s.y]='#';

                que.push(s);

            }

        }

    }

    return -1;

}

int main() {

    while(~scanf("%s",mp[0])) {

        for(int i=1;i<10;++i) {

            scanf("%s",mp[i]);

        }

        printf("%d\n",bfs());

    }

    return 0;

}

 
切换
撰写答案