Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 8173 | Accepted: 1888 |
Description
Input
Output
Sample Input
8 9 1 1 1 3 2 1 1 3 3 1 1 3 4 1 1 3 1 1 0 3 1 2 0 3 1 3 0 3 1 4 0 3 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 1 1 2 0 3 3 0 4 3 1 1.5 1.5 4 0 1 1 0 1 1 1 1 1 2 1 1 1 1 2 0 1 1.5 1.7 -1 -1
Sample Output
5 -1
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <queue> #include <stack> #include <algorithm> #define LL long long #define INF 0x3f3f3f3f using namespace std; int Map[210][210][3]; bool vis[210][210]; int n,m; double fx,fy; int Fx,Fy; int Max; struct node { int x,y; int step; } a,b; void BFS() { memset(vis,false,sizeof(vis)); queue<node>que; a.x = Fx; a.y = Fy; a.step = 0; Max = INF; vis[Fx][Fy] = true; que.push(a); while(!que.empty()) { a = que.front(); que.pop(); if(a.x == 0 || a.y == 0 || a.x > 199 || a.y >199) { if(Max > a.step) Max = a.step; continue; } if(Max < a.step) continue; b.x = a.x + 1; b.y = a.y; if(!vis[b.x][b.y] && Map[a.x][a.y][1] != 1) { vis[b.x][b.y] = true; if(Map[a.x][a.y][1] == 2) b.step = a.step + 1; else b.step = a.step; que.push(b); } b.x = a.x - 1; b.y = a.y; if(!vis[b.x][b.y] && Map[b.x][b.y][1] != 1) { vis[b.x][b.y] = true; if(Map[b.x][b.y][1] == 2) b.step = a.step + 1; else b.step = a.step; que.push(b); } b.x = a.x; b.y = a.y + 1; if(!vis[b.x][b.y] && Map[a.x][a.y][0] != 1) { vis[b.x][b.y] = true; if(Map[a.x][a.y][0] == 2) b.step = a.step + 1; else b.step = a.step; que.push(b); } b.x = a.x; b.y = a.y - 1; if(!vis[b.x][b.y] && Map[b.x][b.y][0] != 1) { vis[b.x][b.y] = true; if(Map[b.x][b.y][0] == 2) b.step = a.step + 1; else b.step = a.step; que.push(b); } } if(Max == INF) printf("-1\n"); else printf("%d\n",Max); } int main() { //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)) { if(m == -1 && n == -1) break; memset(Map,0,sizeof(Map)); while(n--) { int x,y,d,t; scanf("%d%d%d%d",&x,&y,&d,&t); if(d) { for(int i=0;i<t;i++) { Map[x-1][y+i][1] = 1; } } else { for(int i=0;i<t;i++) { Map[x+i][y-1][0] = 1; } } } while(m--) { int x,y,d; scanf("%d%d%d",&x,&y,&d); if(d) Map[x-1][y][1] = 2; else Map[x][y-1][0] = 2; } scanf("%lf%lf",&fx,&fy); Fx = int(fx); Fy = int(fy); if(Fx == 0 || Fx > 199 || Fy == 0 || Fy > 199) { printf("0\n"); continue; } BFS(); } return 0; }