Untitled
unknown
c_cpp
2 years ago
1.9 kB
3
Indexable
// // Created by jin ho Jeon on 2023/11/27. // #include <iostream> #include <queue> #include <utility> #include <cstring> using namespace std; int n,m; int MAP[1001][1001]; vector<pair<int,int> > orders; bool vis[1001][1001]; struct node{ int y; int x; int dist; }; deque<node> que; void solve(){ memset(vis, false, sizeof(vis)); for(int i = 0;i<que.size();i++){ int y = que[i].y; int x = que[i].x; vis[y][x] = true; } // n-1 => break int order_length = orders.size(); while(!que.empty()){ size_t length = que.size(); for(size_t i = 0;i<length;i++){ node cur = que.front(); int y = cur.y; int x = cur.x; int dist = cur.dist; que.pop_front(); if(y==n-1){ cout << dist << '\n'; return; } for(int j = 0; j<order_length;j++){ // inside int ny = y + orders[j].first; int nx = x + orders[j].second; if(0>ny || 0>nx || ny >= n || nx >= m) continue; // inside if(MAP[ny][nx]==0 || vis[ny][nx]) continue; // visit and MAP check vis[ny][nx] = true; node nxt = {ny, nx, dist + 1 }; que.push_back(nxt); } } } cout << -1 << '\n'; return; } int main(void){ ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for(int i = 0;i<n;i++){ for(int j =0;j<m;j++){ cin >> MAP[i][j]; if(i==0 && MAP[i][j]==1){ node tmp = {i, j, 0}; que.push_back(tmp); } } } int o; cin >> o; int s,e; for(int i = 0;i<o;i++){ cin >> s >> e; pair<int, int> tmp = make_pair(s, e); orders.push_back(tmp); } solve(); return 0; }
Editor is loading...
Leave a Comment