城市統計【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.pswp.cn/news/279859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279859.shtml
英文地址,請注明出處:http://en.pswp.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 簡單示例…