vijos 1051送給聖誕夜的極光

2022-05-07 10:48:07 字數 1645 閱讀 3393

送給聖誕夜的極光

這是一道很水很水的寬搜水題,我主要是覺得自己在搜素這一塊有點生疏於是隨便找了一題練手,找到這麼一道水題,原本以為可以一次過的,但是狀況百出,我並不是很擅長bfs,我以前一直用的

pascal

寫bfs

,但是pascal

沒有佇列,所以沒有

c++方便,所以這題我就直接用佇列做了,然後完美的炸空間炸時間,後來改成遞迴呼叫才通過

思路:這一道題和一道寬搜入門題很像,基本上是一樣的,這道題叫細胞個數

這兩個題的區別是,前者要找自己周圍的12個位置,後者只找自己周圍上下左右四個位置

,這題的關鍵點也就是找到這12個位置,其他就是那道細胞的做法,尋找乙個為『

#』的點,以這個點向周圍可擴充套件區域擴充套件,每到乙個擴充套件點就把這個點變成『

-』,直到不能擴充套件,然後繼續尋找為『

#』的點

方法不用多說,先看看我這超時又爆記憶體的佇列bfs吧

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define maxn 105

9using

namespace

std;

1011

intmap[maxn][maxn];

12int

n,m,tot;

1314

struct

node;

1718

const

int dx=;

19const

int dy=;

2021

intmain()

2232}33

34 queueq;

35for(int i=1;i<=n;i++)

36);

43while(!q.empty())

44);

54} 55}

5657}58

}59}60

}6162 printf("%d"

,tot);

63 }

view code

個人覺得佇列可能容易理解一些,但是佇列方法看懂了,遞迴也可以看懂

ac**:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define maxn 105

9using

namespace

std;

1011

intmap[maxn][maxn];

12int

n,m,tot;

13const

int dx=;

14const

int dy=;

1516

void bfs(int x,int

y)1727}

28}2930

intmain()

3140

for(int i=1;i<=n;i++)

41for(int j=1;j<=m;j++)

4248

}

49 cout<

50 }

view code

Vijos1051 送給聖誕夜的極光

試題請參見 聖誕老人回到了北極聖誕區,已經快到12點了.也就是說極光表演要開始了.這裡的極光不是極地特有的自然極光景象.而是聖誕老人主持的人造極光.轟隆隆 烟花響起 來自中國的瀏陽花炮之鄉 接下來就是極光表演了.人造極光事實上就是空中的一幅幅n m的點陣影象.僅僅是由於特別明亮而吸引了非常多非常多小...

vijos1049 送給聖誕夜的禮品

題目大意 順次給出m個置換,反覆使用這m個置換對初始序列進行操作,問k次置換後的序列。m 10,k 2 31。題目分析 先將m個置換所使用的矩陣合併起來,然後做t k m次。剩下的k m次模擬即可。include include include include include include inc...

vijos1048 送給聖誕夜的賀卡

vijos1048 表示不是很懂為什麼這個是七級題。這是一道不明複雜度的玄學搜尋題 大概是sigma i,1,n c i,n n 50 然而實際上過所有資料30ms不到 這裡我們用鄰接表來存衝突關係 enm表示當前狀態該節點有多少個與其衝突的人 然後dfs下去 這就是樸素的思路 inline voi...