題目傳送門
bfs和dfs的簡單題目,在這我只講bfs。
我們先找到乙個 *,然後對其進行 bfs,並將所有訪問過的 * 標記為 .,在進行 bfs 的同時記錄下目前的 * 數量。
當一次 bfs 結束後,我們將統計的數量放入之前開好的桶中,即將 hre
s+
1h_+1
hres+
1。如果此時 hre
sh_
hres
為 0
00,則將星系數量加上 1
11 並更新此時最大的星系,因為只有 hre
sh_
hres
改變了,所以只需要將 hre
sh_
hres
和 max
maxma
x 比較。
結束後再找到乙個沒有被訪問過的 *,然後重複上述過程,直到所有 * 被訪問。
#include
using
namespace std;
char g[
2010][
2010];
int n,m,h[
20000010
],maxn,tots,cnt1,cnt2;
struct node //結構體
;queue q;
int dx[8]
=;int dy[8]
=;void
bfs(
int x,
int y)
//寬搜
} q.
pop();
}if(h[res]==0
) cnt2++
; h[res]++;
//放入桶中
maxn=
max(maxn,h[res]
*res)
;//更新maxn
cnt1+
=res;
//總數++
}int
main()
}while
(cnt1}printf
("%d %d"
,cnt2,maxn)
;//輸出
return0;
}
還有dfs寫法,其實dfs是非常好想的,就是上、下、左、右、左上、右上、左下、右下這四個方位搜尋,找到乙個標記乙個,記住dfs的時候要在未曾遍歷過的點上搜尋
#include
using
namespace std;
const
int maxn=
10010
;const
int maxm=
100010
;char mp[maxn]
[maxn]
;int n,m;
bool vis[maxn]
[maxn]
;int cnt=
0,tmp=
0,ans=
-0x3f3f3f3f
;//初始化+定義
void
dfs(
int x,
int y)
// 暴力dfs
struct stans[maxm]
;int
main()
}for
(int i=
1;i<=n;i++)}
}int maxn=
-0x3f3f3f3f
;for
(int i=
1;i<=ans;i++)}
printf
("%d %d\n"
,cnt,maxn)
;return0;
}
NOI Online 3 入門組題解
洛谷傳送門 第一題還是一如既往的水233 沒什麼好說的。統計每一條訊號。對於乙個訊號,統計sos的數量,方法就是列舉每乙個長度為3的區間,如果這個區間是 sos 那麼就統計進去。取最大數量。有乙個小坑,就是最大可能有多個,要用vector儲存。include using namespace std ...
NOI Online 3 提高組 水壺
在乙個長度為 n 的序列中求出長度為 k 1 的最大子段。本題唯一的需要注意的一點是當 k n 時要輸出所有數的和,像我的考場 scanf d d n,k k if k n k n for int i 1 i n i scanf d a i for int i 1 i k i op a i for ...
NOI Online 3 入門組 第三題 買錶
題目傳送門 首先,我先確定一下暴力是怎麼做的。我在考場上做的暴力是使用dfs所做的,時間複雜度高到要爆。但是我這個蒟蒻還是用了。最終得分50。可是我還想ac啊,怎麼辦呢,那麼我就請教了dalao們,他們說 我諤諤,你連dp 二進位制都做不出來嗎?color boxed texttt 我諤諤,你連 d...