hdu 2645 find the nearest station

来源:互联网 发布:linux fdisk 编辑:程序博客网 时间:2024/06/01 09:14

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2645
bfs爆搜。。

#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<map>using std::cin;using std::cout;using std::endl;using std::find;using std::sort;using std::pair;using std::queue;using std::vector;#define pb(e) push_back(e)#define sz(c) (int)(c).size()#define mp(a, b) make_pair(a, b)#define all(c) (c).begin(), (c).end()#define iter(c) decltype((c).begin())#define cls(arr,val) memset(arr,val,sizeof(arr))#define cpresent(c, e) (find(all(c), (e)) != (c).end())#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)const int N = 190;typedef unsigned long long ull;namespace work {    struct Node {        int x, y, s;        Node(int i = 0, int j = 0, int k = 0) :x(i), y(j), s(k) {}    };    bool map[N][N], vis[N][N];    const int dx[] = { 0, 0, -1, 1 }, dy[] = { -1, 1, 0, 0 };    int n, m, res[N][N];    inline int bfs(int x, int y) {        cls(vis, false);        queue<Node> que;        que.push(Node(x, y, 0));        vis[x][y] = true;        while (!que.empty()) {            Node t = que.front(); que.pop();            if (map[t.x][t.y]) return t.s;            rep(i, 4) {                int nx = dx[i] + t.x, ny = dy[i] + t.y;                if (nx < 0 || nx >= n || ny < 0 || ny >= m || vis[nx][ny]) continue;                que.push(Node(nx, ny, t.s + 1));            }        }        return 0;    }    inline void solve() {        char buf[N];        while (~scanf("%d %d", &n, &m)) {            rep(i, n) {                scanf("%s", buf);                rep(j, m) map[i][j] = buf[j] - '0' & 1;            }            rep(i, n) {                rep(j, m) res[i][j] = map[i][j] ? 0 : bfs(i, j);            }            rep(i, n) {                rep(j, m) printf("%d%c", res[i][j], j < m - 1 ? ' ' : '\n');            }        }    }}int main() {#ifdef LOCAL    freopen("in.txt", "r", stdin);    freopen("out.txt", "w+", stdout);#endif    work::solve();    return 0;}
0 0
原创粉丝点击