迷宫最短路径DFS与BFS

给定一个大小为NxM的迷宫。迷宫有通道和墙壁组成每一步可以向邻接的上下左右四格的通道移动。请求出起点到终点所需的最小步数。*表示障碍物,.表示可以通道。本题假定从起点一定可以移动到终点。

限制条件:

N,M《 100.

 

样例

输入

5 5

.....

.*.*.

.*S*.

.***.

...T*

2 2 4 3

输出

11

 

BFS解法:

#include
#include
using namespace std;

char maze[101][101];
int n,m;

typedef struct node
{
    int x,y;//位置(x,y)
    int step;//从起点到达某位置需要的最少步数
}node;
node Start,End,temp,top;
int a[4]={0,0,1,-1};//表示上下左右位移
int b[4]={1,-1,0,0};//
int flag[101][101]={false};//记录某个位置是否已入过队列

int BFS()
{
    queue que;
    que.push(Start);
    while(!que.empty())
    {
        top=que.front();
        que.pop();
        if(top.x==End.x&&top.y==End.y)
            return top.step;
        for(int i=0;i<4;i++)
        {
            int curx=top.x+a[i];
            int cury=top.y+b[i];
            if(curx>=0&&curx=0&&cury

DFS解法:

#include
 
char maze[100][100];
int startX,startY,endX,endY,n,m;
int flag[100][100];
int move[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
int step;
int ans = 100000;
 
void dfs(int x,int y,int step)
{
	if(maze[x][y] == 'T')
	{
		if(step=0&&curx=0&&cury

 

你可能感兴趣的:(算法入门,搜索算法--BFS,搜索算法--DFS)