解题思路:
这思路是优质题解的思路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 人评分
2^k进制数 (C++代码)使用递归方法浏览:721 |
妹子杀手的故事 (C语言代码)浏览:679 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:470 |
【亲和数】 (C语言代码)浏览:538 |
【绝对值排序】 (C语言代码)浏览:713 |
多输入输出练习1 (C语言代码)浏览:1177 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1029 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:470 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:464 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:898 |