Vijos1051 送給聖誕夜的極光

2021-09-08 03:51:01 字數 1356 閱讀 4851

試題請參見:

聖誕老人回到了北極聖誕區, 已經快到12點了. 也就是說極光表演要開始了. 這裡的極光不是極地特有的自然極光景象. 而是聖誕老人主持的人造極光. 

轟隆隆……烟花響起(來自中國的瀏陽花炮之鄉). 接下來就是極光表演了. 

人造極光事實上就是空中的一幅幅n*m的點陣影象. 僅僅是由於特別明亮而吸引了非常多非常多小精靈的目光, 也成為了聖誕夜最漂亮的一刻. 

然而在每幅n*m的點陣影象中, 每個點僅僅有發光和不發光兩種狀態. 對於全部的發光的點, 在空中就形成了漂亮的圖畫. 而這個圖畫是以若干個(s個)圖案組成的. 對於圖案, 聖誕老人有著嚴格的定義:對於兩個發光的點, 假設他們的曼哈頓距離(對於a(x1,y1)和b(x2,y2), a和b之間的曼哈頓距離為|x1-x2|+|y1-y2|)小於等於2. 那麼這兩個點就屬於乙個圖案……

小精靈們一邊讚賞著極光, 一邊數著每一幅極光影象中的圖案數. 伴著歌聲和舞蹈, 度過了漂亮的聖誕之夜. ^_^

第一行, 兩個數n和m.

接下來一共n行, 每行m個字元. 對於第i行第j個字元, 假設其為「-」, 那麼表示該點不發光, 假設其為「#」, 那麼表示該點發光. 不可能出現其它的字元.

第一行, 乙個數s.

reference:

深度優先搜尋

① 兩個二維布林陣列: 用於儲存地圖和遍歷記錄

② 尋找每乙個座標

③ 對於每乙個座標。推斷

oo o o

o o # o o

o o o

o以#為中心,推斷以上幾個位置(「o」)

若map[i][j]和used[i][j]都為真, 則繼續在那個點進行深搜, 每搜尋到乙個點, 把那個點(use[i][j])置為false

寫之前還記得的, 寫著寫著就忘了.

小心陣列下標越界啊~!! 遞迴呼叫的時候記得推斷邊界.

#include #include const int size = 100;

bool graph[size][size] = ;

bool used[size][size] = ;

void getneighborpoint(int i, int j, int n, int m)

if ( graph[i][j] && !used[i][j] )

}int main()

}// processing

for ( int i = 0; i < n; ++ i ) }}

// output

std::cout << numberofgraphs << std::endl;

return 0;

}

vijos 1051送給聖誕夜的極光

送給聖誕夜的極光 這是一道很水很水的寬搜水題,我主要是覺得自己在搜素這一塊有點生疏於是隨便找了一題練手,找到這麼一道水題,原本以為可以一次過的,但是狀況百出,我並不是很擅長bfs,我以前一直用的 pascal 寫bfs 但是pascal 沒有佇列,所以沒有 c 方便,所以這題我就直接用佇列做了,然後...

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...