洪水!(Flooded!)

有一个n*m(1<=m,n<30)的网格,每个格子是边长为10米的正方形,网格四周是无限长的墙壁。输入每个盒子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度和有多少百分比的区域有水。(高度严格小于水平面)

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int s[900];
int main()
{
 int i,j,m,n,total,cnt=1,num,flag,diff,water;
 double level;
 while(scanf("%d%d",&m,&n)&&m&&n)
 {
  memset(s,0,sizeof(s));
  total=m*n;
  for(i=0;i<total;i++)
  {
   scanf("%d",&s[i]);
   s[i]=s[i]*100;
  }
  scanf("%d",&water);
  sort(s,s+total);
  while(water>0)
  {
   flag=s[0];
   num=0;
   for(i=0;i<total;i++)
   {
    if(s[i]==flag)
    {
     num++;
    }
    else if(s[i]!=flag)
    {
     diff=s[i]-s[0];
     break;
    }
   } 
   if(i<total)
   {
    diff=diff*num;
    if(diff>=water)
    {
     level=flag+(double)(water)/double(num);
     level=level/100.0;
     break;
    }
    else if(water>diff)
    {
     water-=diff;
     for(j=0;j<num;j++)
     {
      s[j]=s[i];
     }
    }
   }
   else
   {
    level=flag+double(water)/double(num);
    level/=100.0;
    break;
   }
  }
  printf("Region %d\n",cnt++);
  printf("Water level is %.2f meters.\n",level);
  printf("%.2lf percent of the region is underwater.\n\n",double(num)/double(total)*100.0);
 }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是八邻域种子蔓延洪水淹没算法的 Python 代码,其中也包含了计算区域淹没面积和受灾人口的部分: ```python import numpy as np def flood_fill(matrix, start_coords, fill_value): """ 使用八邻域种子蔓延洪水淹没算法填充矩阵 :param matrix: 需要填充的矩阵 :param start_coords: 填充的起始坐标 :param fill_value: 填充的值 """ # 获取矩阵的行数和列数 nrows, ncols = matrix.shape # 创建一个布尔类型的矩阵,用于记录每个位置是否已经被填充 filled = np.zeros((nrows, ncols)) # 创建一个列表,用于存储需要填充的位置坐标 fill_coords = [start_coords] # 开始填充 while fill_coords: # 取出需要填充的位置坐标 x, y = fill_coords.pop() # 如果该位置已经被填充,则跳过 if matrix[x, y] != fill_value: continue # 将该位置填充为指定的值 matrix[x, y] = fill_value # 标记该位置已经被填充 filled[x, y] = 1 # 找出该位置周围八个位置的坐标 neighbors = [(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+1, y+1), (x-1, y+1), (x+1, y-1), (x-1, y-1)] # 遍历每个周围的位置 for i, j in neighbors: # 如果该位置已经被填充,则跳过 if i >= 0 and j >= 0 and i < nrows and j < ncols: if not filled[i, j]: fill_coords.append((i, j)) # 计算淹没面积 flooded_area = np.sum(matrix == fill_value) # 计算受灾人口 affected_population = int(flooded_area * 0.002) return matrix, flooded_area, affected_population ``` 使用该函数可以得到填充后的矩阵、淹没面积和受灾人口。其中淹没面积的计算方法是统计矩阵中值等于填充值的个数,受灾人口的计算方法是淹没面积乘以一个系数(这里取0.2%)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【执珪】瑕瑜·夕环玦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值