FZU - 2150 双起点bfs

该博客介绍了如何解决一个算法问题,即在二维网格中寻找两个起始点进行火源放置,使所有草坪能以最短时间被火势完全覆盖。通过使用广度优先搜索(BFS)策略,从每个可能的草坪对开始,找到满足条件的最短时间。
摘要由CSDN通过智能技术生成

题目链接

 

‘#’表示草坪,‘ . ’表示空地,然后可以选择在任意的两个草坪格子点火,火势每一秒会向周围四个格子扩散,问选择那两个点使得燃烧所有的草坪花费的时间最小。

暴力枚举任意的草坪所在的点,然后两个点压进队列里面BFS,找一个满足条件的最小值即可。 

 

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
#include<set>
#include<vector>
using namespace std;
struct node
{
    int x,y;
    int step;
    node(){}
    node(int xx,int yy,int ss):x(xx),y(yy),step(ss){}
};
int n,m;
int vis[20][20];
int dir[4][2]={
  {-1,0},{1,0},{0,-1},{0,1}};
char mp[20][20];
int bfs(node s1,node s2)
{
    int ans=0;
    queue<node> q;
    q.push(s1);
    q.push(s2);
    vis[s1.x][s1.y]=1;
    vis[s2.x][s2.y]=1;
    while(!q.empty())
    {
        node now=q.front();
        q.pop();
        ans=now.step
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值