poj 3669 bfs

来源:互联网 发布:python proxyfix 编辑:程序博客网 时间:2024/05/19 04:54
#include <queue>#include <cstdio>#include <algorithm>#include <iostream>#include <cmath>#include <cstring>using namespace std;const int maxn = 305;const int inf = 0x3f3f3f3f;int mark[maxn][maxn];int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};bool within(int x, int y){    return x >= 0 && y >= 0;}struct Node{    int x, y, t;};queue<Node> q;int main(){    int n;    cin>>n;    memset(mark, 0x3f, sizeof(mark));    for (int i = 0; i<n;i++){        int x, y, t;        scanf("%d%d%d", &x, &y, &t);        mark[x][y] = min(mark[x][y], t);        for (int j=0;j<4;j++){            int tx = x + dx[j], ty = y + dy[j];            if (!within(tx, ty)){                continue;            }            mark[tx][ty] = min(mark[tx][ty], t);        }    }    if (mark[0][0] == 0){        cout << -1 << endl;        return 0;    }    q.push(Node({0,0,0}));    while(q.size()){        int x = q.front().x;        int y = q.front().y;        int t = q.front().t;        q.pop();        for (int k=0;k<4;k++){            int tx = dx[k] + x, ty = dy[k] + y;            if (!within(tx,ty)){                continue;            }            if (mark[tx][ty] <= t + 1){                continue;            }            if (mark[tx][ty] == inf){                cout << t + 1 << endl;                return 0;            }            mark[tx][ty] = 0;            q.push(Node({tx, ty, t + 1}));        }    }    cout << -1 << endl;    return 0;}
原创粉丝点击