卢柱安


私信TA

用户名:H2130819058

访问量:2909

签 名:

卢柱安:2130819058

等  级
排  名 420
经  验 4792
参赛次数 15
文章发表 2
年  龄 0
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

我是菜鸟

TA的其他文章

解题思路:
这思路是优质题解的思路https://blog.dotcpp.com/a/8945

思路如下

①:若某陆地上下左右其中有一个是水域,则该陆地到水域的最短距离一定为1

②:两个点的距离为x坐标相减的差得绝对值与y坐标相减差的绝对值之和

③:把所有水域的坐标保存起来,用②距离公式求出距离选最小一个

④:输出结果

其中最重要的是②

注意事项:
记得要更新距离
参考代码:

#include<iostream>
using namespace std;
int n,m;
struct Waters
{
	int x,y;
};
Waters waters[10001];
int cnt;
int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
	char a[101][102];
	int distance;
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
			
			/*保存水域*/
			
			if(a[i][j]=='0')
			{
				waters[cnt].x=i;
				waters[cnt++].y=j;
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0,minn=-1;j<m;j++)
		{
			if(a[i][j]=='0')
			{
				cout<<0<<" ";
				continue;
			}
			distance=999999999;					//记得要更新 
			
			/*遍历每一个水域,保存最小距离的*/
			
			for(int w=0,co,ro;w<cnt;w++)
			{
				co=waters[w].x-i;
				ro=waters[w].y-j;
				if(co<0)co*=-1;
				if(ro<0)ro*=-1;
				distance=min(distance,co+ro);
			}
			cout<<distance<<" ";
		}
		cout<<"\n";
	}

	return 0;
}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区