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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷P1162 填涂颜色

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P1162 填涂颜色 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://www.luogu.org/problemnew/show/P1162

這道題是LITTLESUN寫的第一道BFS哦!

對于這道題的的思路是把封閉圖形外邊的0標記一邊,在最后輸出的時候把沒有標記過的0輸出為2,其他按照原圖輸出。

對于這道題的的邊界有兩種判斷方式。第一種是在原圖外面加一圈0

AC代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #define MAXN 2000 using namespace std; int G[MAXN][MAXN]; bool vis[MAXN][MAXN]; struct item {int x;int y; }; int n; item a; item t2; void bfs() {queue<item>q;a.x=1;a.y=1;q.push(a);while(!q.empty()){item t=q.front();q.pop();if(G[t.x+1][t.y]==0&&t.x!=n+2&&!vis[t.x+1][t.y]){vis[t.x+1][t.y]=1;t2.x=t.x+1;t2.y=t.y;q.push(t2);}if(G[t.x-1][t.y]==0&&t.x!=1&&!vis[t.x-1][t.y]){vis[t.x-1][t.y]=1;t2.x=t.x-1;t2.y=t.y;q.push(t2);}if(G[t.x][t.y+1]==0&&t.y!=n+2&&!vis[t.x][t.y+1]){vis[t.x][t.y+1]=1;t2.x=t.x;t2.y=t.y+1;q.push(t2);} if(G[t.x][t.y-1]==0&&t.y!=1&&!vis[t.x][t.y-1]){vis[t.x][t.y-1]=1;t2.x=t.x;t2.y=t.y-1;q.push(t2);}}}int main() {scanf("%d",&n);for(int i=2;i<=n+1;i++){for(int j=2;j<=n+1;j++){scanf("%d",&G[i][j]);}}bfs();for(int i=2;i<=n+1;i++){for(int j=2;j<=n+1;j++){if(!vis[i][j]&&G[i][j]==0){G[i][j]=2;}}}for(int i=2;i<=n+1;i++){//cout<<endl;for(int j=2;j<=n+1;j++){printf("%d ",G[i][j]);}cout<<endl;}return 0; }

另一種方法是枚舉邊界每一個不是一的點作為起點進行BFS

但這個代碼不知道哪里鍋掉了,只有80分qwq

代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #define MAXN 2000 using namespace std; int G[MAXN][MAXN]; bool vis[MAXN][MAXN]; struct item {int x;int y; }; int n; item a; queue<item> q; void bfs(item b) {q.push(b);while(!q.empty()){item t=q.front();q.pop();if(G[t.x+1][t.y]==0&&t.x!=n&&!vis[t.x+1][t.y]){vis[t.x+1][t.y]=1;t.x=t.x+1;t.y=t.y;q.push(t);}if(G[t.x-1][t.y]==0&&t.x!=1&&!vis[t.x-1][t.y]){vis[t.x-1][t.y]=1;t.x=t.x-1;t.y=t.y;q.push(t);}if(G[t.x][t.y+1]==0&&t.y!=n&&!vis[t.x][t.y+1]){vis[t.x][t.y+1]=1;t.x=t.x;t.y=t.y+1;q.push(t);} if(G[t.x][t.y-1]==0&&t.y!=1&&!vis[t.x][t.y-1]){vis[t.x][t.y-1]=1;t.x=t.x;t.y=t.y-1;q.push(t);}} } void work(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if((i==1||i==n||j==1||j==n)&&G[i][j]!=1){a.x=i;a.y=j; bfs(a);}}} } int main() {scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&G[i][j]);}}work();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!vis[i][j]&&G[i][j]==0){G[i][j]=2;}}}for(int i=1;i<=n;i++){//cout<<endl;for(int j=1;j<=n;j++){printf("%d ",G[i][j]);}cout<<endl;}return 0; }

?

轉載于:https://www.cnblogs.com/LITTLESUNwl/p/10516634.html

總結

以上是生活随笔為你收集整理的洛谷P1162 填涂颜色的全部內容,希望文章能夠幫你解決所遇到的問題。

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