zoukankan      html  css  js  c++  java
  • FZU

    题意,10*10的地图,有若干块草地“#”,草地可以点燃,并在一秒后点燃相邻的草地。有墙壁‘·‘阻挡。初始可以从任意两点点火。问烧完最短的时间。若烧不完输出-1.

    题解:由于100的数据量,直接暴力。枚举两个起点,推入队列,然后bfs。烧完就返回深度,更新一个min值。

    坑:(帮同学照bug)

    return t.step+1;bfs后没有算上最后一步

    ac代码

    #define  _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    #include <queue>
    #include <vector>
    using namespace std;
    char map[15][15];
    int vis[15][15];
    int T, n, m, ans, num;
    struct Node {
        int i, j, step;
        Node(int i = 0, int j = 0, int step = 0) :i(i), j(j), step(step) {}
    };
    int dir[4][2] = { { 1,0 },{ -1,0 },{ 0,1 },{ 0,-1 } };
    bool check(int i, int j) {
        if (i<0 || i >= n || j<0 || j >= m || vis[i][j] || map[i][j] == '.') return true;
        return false;
    }
    int bfs(int i, int j, int x, int y) {
        queue<Node>q;
        q.push(Node(i, j, 0)); q.push(Node(x, y, 0));
        vis[i][j] = 1; vis[x][y] = 1;
        int cnt;
        if (i == x&&j == y) cnt = 1;
        else cnt = 2;
        while (!q.empty()) {
            Node t = q.front();
            q.pop();
            for (int k = 0; k<4; k++) {
                int di = t.i + dir[k][0];
                int dj = t.j + dir[k][1];
                if (check(di, dj)) continue;
                q.push(Node(di, dj, t.step + 1));
                vis[di][dj] = 1;
                cnt++;
            }
            if (cnt >= num) { 
                //cout << i << ' ' << j << ' ' << x << ' ' << y <<' '<<t.step<< endl;
                return t.step+1; }
        }
        return -1;
    }
    int main() {
        scanf("%d", &T);
        for (int t = 1; t <= T; t++) {
            ans = (int)1e9; num = 0;
            scanf("%d%d", &n, &m);
            for (int i = 0; i<n; i++) {
                scanf("%s", map[i]);
                for (int j = 0; j<m; j++) if (map[i][j] == '#') num++;
            }
            if (num <= 2) { printf("Case %d: %d
    ", t, 0); continue; }
            for (int i = 0; i<n; i++) {
                for (int j = 0; j<m; j++) {
                    if (map[i][j] != '#') continue;
                    for (int x = 0; x<n; x++) {
                        for (int y = 0; y<m; y++) {
                            if (map[x][y] != '#') continue;
                            memset(vis, 0, sizeof(vis));
                            int tmp = bfs(i, j, x, y);
                            if (tmp>0) ans = min(ans, tmp);
                        }
                    }
                }
            }
            if (ans == (int)1e9) ans = -1;
            printf("Case %d: %d
    ", t, ans);
        }
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/SuuT/p/8580618.html
Copyright © 2011-2022 走看看