城市统计【BFS】

题目大意:

中山市的地图是一个n*n的矩阵,其中标号为1的表示商业区,标号为0的表示居民区。为了考察市内居民区与商业区的距离,并对此作出评估,市长希望你能够编写一个程序完成这一任务。
  居民区i到商业区的距离指的是到距离它最近的商业区j的距离(|Xi-Xj|+|Yi-Yj|),而你将统计的是对于城市中的每一个区域k,以它为中心,所有满足max(|Xk-Xm|,|Yk-Ym|)<=r的区域m到商业区距离之和。结果同样以n*n的矩阵形式输出。

思路:

70分: 
O(n4)直接暴力求解即可。

100分:

BFS

首先在读入的时候,若这个点是商业区,就先将它入队,之后跑一边BFS,求出每个居民区到商业区的距离(由于每个点只要访问1次,所以时间复杂度为O(n2)),之后用二维前缀和加速,输出每个位置的答案。总时间复杂度为O(tn2)

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 const int dx[]={0,0,0,1,-1};
 7 const int dy[]={0,1,-1,0,0};
 8 int a[301][301],b[301][301],p[301][301],t,n,r,sum,head,tail,state[500001][3];
 9 
10 int abs(int x)
11 {
12     if (x>0) return x;
13     return -x;
14 }
15 
16 int minn(int x)
17 {
18     return min(x,n);
19 }
20 
21 int maxn(int x)
22 {
23     return max(x,0);
24 }
25 
26 void bfs()
27 {
28     do
29     {
30         head++; 
31         for (int i=1;i<=4;i++)  //向四个方向扩展
32         {
33             int xx=state[head][1]+dx[i];
34             int yy=state[head][2]+dy[i];
35             if (xx<0||xx>n||yy<0||yy>n||p[xx][yy]) continue;
36             tail++;  //入队
37             p[xx][yy]=1;
38             state[tail][1]=xx;
39             state[tail][2]=yy;
40             b[xx][yy]=b[state[head][1]][state[head][2]]+1;
41         }
42     }
43     while (head<tail);
44     return;
45 }
46 
47 int main()
48 {
49     scanf("%d",&t);
50     while (t--)
51     {
52         memset(b,0,sizeof(b));
53         memset(a,0,sizeof(a));
54         memset(p,0,sizeof(p));
55         scanf("%d%d",&n,&r);
56         for (int i=1;i<=n;i++)
57          for (int j=1;j<=n;j++)
58          {
59             scanf("%d",&a[i][j]);
60             a[i][j]++;
61             if (a[i][j]==2)  //商业区
62             {
63                 tail++;  //入队
64                 state[tail][1]=i;
65                 state[tail][2]=j;
66                 p[i][j]=1;
67             }
68         } 
69         bfs();
70         for (int i=1;i<=n;i++)
71          for (int j=1;j<=n;j++)
72           b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];  //前缀和
73         for (int i=1;i<=n;i++)
74         {
75             for (int j=1;j<=n;j++)
76              printf("%d ",b[minn(i+r)][minn(j+r)]-b[maxn(i-r-1)][minn(j+r)]-b[minn(i+r)][maxn(j-r-1)]+b[maxn(i-r-1)][maxn(j-r-1)]); 
77             putchar(10);
78         } 
79         putchar(10);
80     }
81     return 0;
82 }

 

转载于:https://www.cnblogs.com/hello-tomorrow/p/9314772.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 DataAnnotations(数据注解)实现通用模型数据校验

.net 跨平台参数校验的意义在实际项目开发中&#xff0c;无论任何方式、任何规模的开发模式&#xff0c;项目中都离不开对接入数据模型参数的合法性校验&#xff0c;目前普片的开发模式基本是前后端分离&#xff0c;当用户在前端页面中输入一些表单数据时&#xff0c;点击提交按…

网线的做法 及 POE的介绍

网线的做法 以太网线采用差分方式传输。所谓差分方式传输&#xff0c;就是发送端在两条信号线上传输幅值相等相位相反的电信号&#xff0c;接收端对接受的两条线信号作减法运算&#xff0c;这样获得幅值翻倍的信号。其抗干扰的原理是&#xff1a;假如两条信号线都受到了同样&am…

unity 使用tile_如何使用Tile从网上查找电话

unity 使用tileTile is a fantastic little gadget that can help you find your lost keys or wallet. However, it can also locate and ring your phone, even if you never buy a single physical Tile. Here’s how to find your lost phone using the Tile app on the we…

你与一份好简历之间的距离

阅读本文大概需要 2.7 分钟。每年年初都是企业的招聘旺季&#xff0c;对应的三四月份绝对跳槽、找工作的好时机&#xff0c;业内经常称呼这两个月为金三银四。实力雄厚的人&#xff0c;那个月找工作问题都不大&#xff0c;但是也会尽量挑选个好时机&#xff0c;能有更多的选择。…

Python 循环删除指定文件夹下所有的.longtian类型文件

# -*- coding: utf-8 -*-import os#遍历文件夹删除文件 def traversing_dir(rootDir):#遍历根目录for root,dirs,files in os.walk(rootDir):for file in files:#文件后缀名extFileos.path.splitext(file)[1]if extFile".longtian":os.remove(os.path.join(root,file…

《ASP.NET Core 6框架揭秘实例》演示[35]:利用Session保留语境

客户端和服务器基于HTTP的消息交换就好比两个完全没有记忆能力的人在交流&#xff0c;每次单一的HTTP事务体现为一次“一问一答”的对话。单一的对话毫无意义&#xff0c;在在同一语境下针对某个主题进行的多次对话才会有结果。会话的目的就是在同一个客户端和服务器之间建立两…

Vincross孙天齐:人机界面的突破将引发科技革命

8月23—27日&#xff0c;世界机器人大会在北京举办&#xff0c;全球各国机器人领域的优秀企业悉数亮相&#xff0c;五花八门的机器人及产业链上下游最新技术均能在这次盛会上找到踪迹&#xff0c;整个会场充满了未来感与时代发展的气息。 大会中智慧城市服务机器人技术与应用专…

如何在Windows上使用64位Web浏览器

Google and Mozilla now offer 64-bit versions of Chrome and Firefox for Windows. Here’s how to find out what version you’re running and how to upgrade. Google和Mozilla现在提供适用于Windows的64位版本的Chrome和Firefox。 这是找出正在运行的版本以及如何升级的方…

立下“去O”Flag的AWS,悄悄修炼了哪些内功?

AWS re:Invent 2018大会上&#xff0c;AWS首席执行执行官Andy Jassy 表示到 2019 年底&#xff0c;亚马逊将全面放弃使用 Oracle 数据库&#xff0c;97&#xff05;的“关键任务数据库”将运行在亚马逊自己的数据库服务上。 如今&#xff0c;2019年已经过去了四分之一&#xff…

static作用:静态变量的生存周期和作用域

首先要理解生存周期与作用域的区别&#xff1a; 生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间&#xff0c;而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁&#xff0c;除了静态变量之外的局部变量都存放于栈中…

刘强东痛批京东高管,拿PPT骗他!网友怒了:爱用 PPT 忽悠的人,他们都遭人痛恨...

这是头哥侃码的第272篇原创因为被新冠感染&#xff0c;所以最近两周都在休养。前几天&#xff0c;我无意中看到一则有关刘强东的新闻&#xff0c;大致是他在京东内部管理培训会上痛批部分高管&#xff0c;称 “拿PPT和假大空词汇忽悠自己的人就是骗子”&#xff0c;表示部分高管…

关于file的部分简单命令

1.关于file的简单命令 2.创建/删除 文件/目录 ## -f和-r可以连用&#xff0c;表示强制删除 3.文件/目录的复制 ##复制是一个新建的过程&#xff0c;在保持原有不变的基础上重新再建立一个 4.文件/目录的移动 ##移动是一个重命名的过程&#xff0c;但不改变其中的内容 本文转自…

字节与浮点型转换软件_如何与另一个防病毒软件一起运行恶意软件字节

字节与浮点型转换软件Malwarebytes Anti-Malware is a great security tool that’s particularly effective against “potentially unwanted programs (PUPs)” and other nasty software traditional antivirus programs don’t deal with. But it’s intended to be used a…

vsftpd服务的搭建

1.vsftpd介绍vsftpd&#xff1a;是非常安全的ftp守护进程(Very secure ftp Daemon)。进程&#xff1a;正在进行&#xff08;运行running&#xff09;的程序。守护进程Daemon&#xff1a;网络服务类的程序都会有守护进程。守护进程是指实时监测服务访问状态的程序。通常都是在系…

火狐浏览器书签(收藏夹)全部消失,历史记录也消失,如何恢复

今天关闭再打开火狐浏览器瞬间懵逼&#xff0c;浏览器所有的记录都没了&#xff0c;映入眼帘的的火狐新手指导页&#xff0c;而且主页导航变成了hao123&#xff0c;我估计是外部程序篡改了浏览器配置&#xff0c;或者其他异常导致浏览器重置。书签、历史记录对开发人员的重要性…

apple tv 开发_如何防止Apple TV进入睡眠状态

apple tv 开发Your Apple TV, by default, goes to sleep fairly quickly when not in use. That’s great for power saving but not so great if you like to keep it on. Let’s take a look at how to extend how long it stays awake or disable sleep mode altogether. 默…

MASA MAUI Plugin (七)应用通知角标(小红点)Android+iOS

背景MAUI的出现&#xff0c;赋予了广大Net开发者开发多平台应用的能力&#xff0c;MAUI 是Xamarin.Forms演变而来&#xff0c;但是相比Xamarin性能更好&#xff0c;可扩展性更强&#xff0c;结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目…

SAP如何查看会计凭证

比如SAP中已经存在着很多会计凭证&#xff0c;你想要进入SAP随便看看会计凭证的列表&#xff0c;怎么操作呢&#xff1f;事务码 IDCNDOC运行结果看到了凭证们&#xff0c;和每个凭证的行项目们上图看到的结果比较凌乱实际上我们重新进入IDCNDOC可以通过输入的勾选&#xff0c;选…

Spring Data Redis与Jedis的选择(转)

说明&#xff1a;内容可能有点旧&#xff0c;需要在业务上做权衡。 Redis的客户端有两种实现方式&#xff0c;一是可以直接调用Jedis来实现&#xff0c;二是可以使用Spring Data Redis&#xff0c;通过Spring的封装来调用。应该使用哪一个呢&#xff1f;基于当前版本Spring Dat…

C# 温故而知新:Stream篇(五)

MemoryStream 目录&#xff1a; 1 简单介绍一下MemoryStream 2 MemoryStream和FileStream的区别 3 通过部分源码深入了解下MemoryStream 4 分析MemorySteam最常见的OutOfMemory异常 5 MemoryStream 的构造 6 MemoryStream 的属性 7 MemoryStream 的方法 8 MemoryStream 简单示例…