acwing 1076 迷宫问题

简介: acwing 1076 迷宫问题

活动 - AcWing

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<vector>
 
using namespace std ;
const int N = 1010 ;
int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}} ;
struct node{
  int x ,  y ;
 
};
queue<node> q;
int n;
int g[N][N] ;
node pre[N][N] ;
int dis[N][N] ;
vector<node> fa ;
void bfs(){
  q.push({0,0}) ;
  dis[0][0] = 0 ;
  while(!q.empty()){
    node now = q.front() ;
    q.pop() ;
    int x = now.x , y = now.y ;
    if(x == n-1 && y == n-1){
      int tmx = x , tmy = y;
      while(tmx != 0||tmy != 0){
        node b = {tmx,tmy} ;
        fa.push_back(b) ;
        node a = pre[tmx][tmy] ;
        tmx = a.x; tmy = a.y ;
      }
      fa.push_back({0,0}) ;
      return ;
    }
    for(int i = 0 ; i < 4 ; i ++){
      int tx = x + d[i][0] , ty = y + d[i][1] ;
      if(tx<0||tx>=n||ty<0||ty>=n||g[tx][ty]||dis[tx][ty]!=-1) continue ;
      q.push({tx,ty}) ;
      dis[tx][ty] = dis[x][y] + 1 ;
      pre[tx][ty] = {x,y} ;
    }
  }
}
int main(){
  cin >> n  ;
  for(int i = 0 ; i < n ;i ++){
    for(int j = 0 ; j < n ; j ++){
      cin >> g[i][j] ;
    }
  }
  memset(dis,-1,sizeof(dis)) ;
  bfs() ;
  for(int i = fa.size()-1 ; i >=0 ; i --){
    cout << fa[i].x << " " << fa[i].y << endl ;
  }
}
目录
相关文章
|
6月前
【洛谷 P2089】烤鸡(深度优先搜索)
## 摘要: 猪猪Hanke的烤鸡问题要求找出所有配料组合,使得$10$种配料(每种$1$到$3$克)的总和等于给定美味程度$n$。输入为正整数$n$,输出为方案总数及所有符合条件的配料分配,按字典序排列。样例输入$11$,输出$10$种方案。代码采用递归搜索,先计数再打印方案。$n\leq5000$时保证数据覆盖。
33 0
|
2月前
acwing 1112 迷宫
acwing 1112 迷宫
15 0
|
7月前
|
算法 C语言
每日一题——迷宫问题(I)
每日一题——迷宫问题(I)
|
7月前
|
机器学习/深度学习 存储
leetcode-1036:逃离大迷宫
leetcode-1036:逃离大迷宫
37 0
|
Java
BFS广度优先遍历——Acwing 844. 走迷宫
BFS广度优先遍历——Acwing 844. 走迷宫
86 0
洛谷 P1141 01迷宫
洛谷 P1141 01迷宫
84 0
洛谷P1605:迷宫
洛谷P1605:迷宫
88 0
AcWing——方格迷宫(有点不一样的迷宫问题)
AcWing——方格迷宫(有点不一样的迷宫问题)
95 0