题目链接
‘#’表示草坪,‘ . ’表示空地,然后可以选择在任意的两个草坪格子点火,火势每一秒会向周围四个格子扩散,问选择那两个点使得燃烧所有的草坪花费的时间最小。
暴力枚举任意的草坪所在的点,然后两个点压进队列里面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