LeetCode 1162. 地图分析

在这里插入图片描述
在这里插入图片描述
思路:从所有陆地同时开始bfs,维护距离矩阵d,最后从d中找出最大值即为所求

class Solution {
private:
	const int inf=1e8;
	typedef pair<int,int> P;
	int d[100][100],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
public:
    int maxDistance(vector<vector<int>>& grid) {
    	int n=grid.size();
    	queue<P>q; 
    	for(int i=0;i<n;i++)
        	for(int j=0;j<n;j++){
            	if(!grid[i][j]) d[i][j]=inf;//海洋距离初始化为inf,陆地为0
            	else q.push(P(i,j));//所有陆地入队
        	}
    	if(q.size()==0||q.size()==n*n) return -1;//全是海洋或陆地
    	while(!q.empty()){
        	P p=q.front(); q.pop();        
        	for(int i=0;i<4;i++){
            	int nx=p.first+dx[i],ny=p.second+dy[i];
            	if(0<=nx&&nx<n&&0<=ny&&ny<n&&d[nx][ny]==inf){
                	q.push(P(nx,ny)); d[nx][ny]=d[p.first][p.second]+1;
            	}
        	}  
    	}
    	//找出距离矩阵d中的最大值
    	int max=0;
    	for(int i=0;i<n;i++)
        	for(int j=0;j<n;j++)
            	if(max<d[i][j]) max=d[i][j];
    	return max;
	}
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值