题目描述:
在一个2D 网格图里有n个障碍物, FJ 要开拖拉机从他初始的点到源点(0, 0), 问需要移走多少个障碍物
这道题本身是一道简化板的shortest path
一个position若有障碍物是为1,否则视为0
当遇到0时把position push到queue的前面,而遇到1时把position push到后面, 同时用dis数组记录出发点到当前点的cost
这样做可以确保position的花费在queue里会保持 升序, 而由于我们保持了升序, 每个position只要visit 一次即可, 因为后面重复visit的相同position 花费一定更大
用deque实现, 常数O(1000 * 1000)
#include <iostream>
#include <deque>
#include <cstring>
#define INF 0x7fffffff
using namespace std;
int n;
int dist[1005][1005];
bool grid[1005][1005];
int sr, sc;
int dirR[]={-1, 0, 0, 1}, dirC[]={0, -1, 1, 0};
deque<pair<int, int> > Q;
int main(){
cin>>n>>sr>>sc;
for(int i=0;i<n;i++){