BFS——迷宫问题(求最短路)

题目:

给定一个大小为 N×M 的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。

限制条件;N, M ≤ 100

Input:

BFS——迷宫问题(求最短路)_第1张图片

Output:

22

代码:

//
//  main.cpp
//  BFS(迷宫问题自己写)
//
//  Created by showlo on 2018/4/13.
//  Copyright © 2018年 showlo. All rights reserved.
//

#include 
#include 
#include 
using namespace std;
typedef pair P;
#define max_n 102
#define max_m 102
#define inf 1000000
int N,M;
char map[max_n][max_m];
int direct[max_n][max_m];
int sx,sy,gx,gy;
int ans;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};

int bfs(int sx,int sy,int gx,int gy)
{
    int nx,ny;
    queue

Q; memset(direct, inf, sizeof(direct)); Q.push(P(sx,sy)); direct[sx][sy]=0; while (Q.size()) { P q=Q.front(); Q.pop(); if (q.first==gx&&q.second==gy) break; else{ for (int i=0; i<=3; i++) { nx=q.first+dx[i]; ny=q.second+dy[i]; if (nx<0||nx>N||ny<0||ny>M||map[nx][ny]=='#'||direct[nx][ny]

体会:目前感觉bfs比dfs简单一些,只需要一个while循环不停入队出队就可以了。也可能是昨天被dfs虐的太惨了(捂脸哭

你可能感兴趣的:(自学编程,useful,BFS,C语言)