原题链接:水陆距离
解题思路:
这思路是优质题解的思路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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复