B12 BFS 迷宫 最短路

视频链接:B12 BFS 迷宫 最短路_哔哩哔哩_bilibili

 

POJ3984 迷宫问题

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;

const int N = 1010;
int n,g[N][N];
struct Node{
  int x,y;
} path[N][N];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};

void bfs (int x,int y){
  queue<Node> q;
  q.push({x,y});
  g[x][y] = 1;
  while(q.size()){
    auto u=q.front(); q.pop();
    for(int i = 0; i < 4; i ++){
      int a = u.x+dx[i],b = u.y+dy[i];
      if(a<0||a>=n||b<0||b>=n)continue;
      if(g[a][b])continue;
      g[a][b] = 1;
      path[a][b] = u;
      q.push({a,b});
    }        
  }
}
int main(){
  cin >> n;
  for(int i = 0; i < n; i ++)
    for(int j = 0; j < n; j ++)
      scanf("%d",&g[i][j]);
  bfs(n-1,n-1); //倒序搜索
  Node p={0,0};
  while(1){
    printf("%d %d\n",p.x,p.y);
    if(p.x==n-1&&p.y==n-1)break;
    p = path[p.x][p.y];
  }
  return 0;
}

 

B3625 迷宫寻路 - 洛谷

#include<bits/stdc++.h>
using namespace std;

int n,m;
char g[101][101];
struct node{int x,y;};
queue<node> q;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};

bool bfs(int x,int y){
  q.push({x,y}); 
  g[x][y]='#';
  while(q.size()){
    auto t=q.front();q.pop();
    for(int i=0;i<4;i++){
      int a=t.x+dx[i],b=t.y+dy[i];
      if(a==n&&b==m) return 1;
      if(a<1||a>n||b<1||b>m) continue;
      if(g[a][b]=='#') continue;
      q.push({a,b}); 
      g[a][b]='#';
    }
  }
  return 0;
}
int main(){
  cin>>n>>m;
  for(int i=1;i<=n;i++)
    scanf("%s",g[i]+1);
  if(bfs(1,1)) cout<<"Yes";
  else cout<<"No";
}

 

posted @ 2022-05-28 13:20  董晓  阅读(1215)  评论(0)    收藏  举报