原题链接:水陆距离
解题思路:
这思路是优质题解的思路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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复