日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十一届蓝桥杯国赛 扩散-多源bfs

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十一届蓝桥杯国赛 扩散-多源bfs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】
小藍在一張無限大的特殊畫布上作畫。
這張畫布可以看成一個方格圖,每個格子可以用一個二維的整數坐標表示。
小藍在畫布上首先點了一下幾個點:(0, 0), (2020, 11), (11, 14), (2000, 2000)。
只有這幾個格子上有黑色,其它位置都是白色的。
每過一分鐘,黑色就會擴散一點。具體的,如果一個格子里面是黑色,它
就會擴散到上、下、左、右四個相鄰的格子中,使得這四個格子也變成黑色
(如果原來就是黑色,則還是黑色)。
請問,經過 2020 分鐘后,畫布上有多少個格子是黑色的。

代碼如下:

#include <iostream> #include <queue> using namespace std; const int N = 10010; bool vis[N][N]; typedef long long LL; LL ans = 0;int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};struct node {int x;int y;int p; };void bfs() {queue<node>q;vis[0 + 3000][0 + 3000] = true;//相對位置不變結果不變 ,不加數組會越界 //這里如果不是加3000,是加2000也會越界,//所以我們還是盡量讓它移動到比較中間的位置vis[2020 + 3000][11 + 3000] = true;vis[11 + 3000][14 + 3000] = true;vis[2000 + 3000][2000 + 3000] = true;q.push({0 + 3000, 0 + 3000, 0});q.push({2020 + 3000, 11 + 3000, 0});q.push({11 + 3000, 14 + 3000, 0});q.push({2000 + 3000, 2000 + 3000, 0});ans = 4;//最開始有4個點while (q.size()) {node t = q.front();q.pop();if (t.p == 2020)continue;for (int i = 0; i < 4; i++) {int xx = t.x + dx[i], yy = t.y + dy[i];if (!vis[xx][yy]) {vis[xx][yy] = true;ans++;q.push({xx, yy, t.p + 1});}}} }int main() {bfs();cout << ans << endl;return 0; }

總結

以上是生活随笔為你收集整理的十一届蓝桥杯国赛 扩散-多源bfs的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。