送給聖誕夜的極光
這是一道很水很水的寬搜水題,我主要是覺得自己在搜素這一塊有點生疏於是隨便找了一題練手,找到這麼一道水題,原本以為可以一次過的,但是狀況百出,我並不是很擅長bfs,我以前一直用的
pascal
寫bfs
,但是pascal
沒有佇列,所以沒有
c++方便,所以這題我就直接用佇列做了,然後完美的炸空間炸時間,後來改成遞迴呼叫才通過
思路:這一道題和一道寬搜入門題很像,基本上是一樣的,這道題叫細胞個數
這兩個題的區別是,前者要找自己周圍的12個位置,後者只找自己周圍上下左右四個位置
,這題的關鍵點也就是找到這12個位置,其他就是那道細胞的做法,尋找乙個為『
#』的點,以這個點向周圍可擴充套件區域擴充套件,每到乙個擴充套件點就把這個點變成『
-』,直到不能擴充套件,然後繼續尋找為『
#』的點
方法不用多說,先看看我這超時又爆記憶體的佇列bfs吧
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#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 }
個人覺得佇列可能容易理解一些,但是佇列方法看懂了,遞迴也可以看懂
ac**:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#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 }
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...