Dfs p1454 聖誕夜的極光

2022-05-27 18:09:12 字數 1581 閱讀 6578

題目描述-->p1454 聖誕夜的極光

題意概括:

尋找聯通塊數量,這裡的連通塊定義與其他的不同.

這裡定義為曼哈頓距離不超過2的都屬於乙個聯通塊.

什麼?不知道曼哈頓距離是啥?

曼哈頓距離簡易概括->|x1-x2|+|y1-y2|,兩點之間橫縱座標的差的絕對值之和.

詳細解釋->曼哈頓距離

看到大家都在說12個方向,具體是哪12個方向呢?

假設黃色點為我們當前所在節點.那我們圖中標出的紅色點,都是滿足與黃色點曼哈頓距離為2的點.

但這才有8個方向啊!

回望題意,曼哈頓距離不超過2的都屬於乙個聯通塊

曼哈頓距離不超過2,那我們的圖應該是這樣的↓.

(藍色點即為與黃色點曼哈頓距離為1的.

所以說,現在12個方向就很明確了!

根據標明的座標,我們很容易打出12個方向對應的位置變化. 像這樣↓

const int ax=;

const int ay=;

//const型別可自動識別陣列大小.

//不過貌似不加const也可以識別

然後我們我又遇到了難題,

如何輸入?

字元型別,我們一般選擇用

scanf("%c"),getchar(),cin來進行輸入.

但是這題,用scanf,會出現蜜汁錯誤.(用scanf只get到了30pts...

而用getchar則會讀取行末換行符,需要加判斷.

所以我們直接選用cin來讀入字元.(感覺cin輸入字元還是很少出鍋的.

因此,我們搜到乙個為'#'的位置,就去標記與它在乙個聯通塊中的位置,則聯通塊個數++即可.

ps:

or > ||

and> &&

---------------------**--------------------

#include#define il inline

#define ri register int

il void in(int &x)

while(s>='0' and s<='9')

x*=f;

}int n,m,ans;

char res[108][108];

const int ax=;

const int ay=;

bool vis[108][108];

il void dfs(int x,int y)

}int main()

} printf("%d",ans);

}

P1454 聖誕夜的極光

題目背景 聖誕夜系列 題目描述 聖誕老人回到了北極聖誕區,已經快到12點了。也就是說極光表演要開始了。這裡的極光不是極地特有的自然極光景象。而是聖誕老人主持的人造極光。轟隆隆 烟花響起 來自中國的瀏陽花炮之鄉 接下來就是極光表演了。人造極光其實就是空中的一幅幅n m的點陣影象。只是因為特別明亮而吸引...

Vijos1051 送給聖誕夜的極光

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

vijos 1051送給聖誕夜的極光

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