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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

The Castle(信息学奥赛一本通-T1250)

發(fā)布時(shí)間:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 The Castle(信息学奥赛一本通-T1250) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目描述】

一座城堡被分成m*n個(gè)方塊(m≤50,n≤50),每個(gè)方塊可有0~4堵墻(0表示無墻)。下面示出了建筑平面圖:

圖中的加粗黑線代表墻。幾個(gè)連通的方塊組成房間,房間與房間之間一定是用黑線(墻)隔開的。

現(xiàn)在要求你編一個(gè)程序,解決以下2個(gè)問題:

????1、該城堡中有多少個(gè)房間?

????2、最大的房間有多大?

【輸入】

平面圖用一個(gè)數(shù)字表示一個(gè)方塊(第1個(gè)房間用二進(jìn)制1011表示,0表示無東墻,用十進(jìn)制11表示)。

第一行一個(gè)整數(shù)m(m≤50),表示房子南北方向的長度。

第二行一個(gè)整數(shù)n(n≤50),表示房子?xùn)|西方向的長度。

后面的m行,每行有n個(gè)整數(shù),每個(gè)整數(shù)都表示平面圖對應(yīng)位置的方塊的特征。每個(gè)方塊中墻的特征由數(shù)字P來描述(0≤P≤15)。數(shù)字P是下面的可能取的數(shù)字之和:

????1(西墻 west)

????2(北墻 north)

????4(東墻 east)

????8(南墻 south)

室內(nèi)的墻被定義兩次: 例如方塊(1,1)中的南墻也被位于其南面的方塊(2,1)定義了一次。

建筑中至少有兩個(gè)房間。

【輸出】

第1行:一個(gè)整數(shù),表示房間總數(shù);

第2行:一個(gè)整數(shù),表示最大房間的面積(方塊數(shù))。

【輸入樣例】

4
7
11 6 11 ?6 ?3 10 ?6
7 ?9 ?6 13 ?5 15 ?5
1 10 12 ?7 13 ?7 ?5
13 11 10 8 10 12 13

【輸出樣例】

5
9

【源程序】

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 51 #define MOD 2520 #define E 1e-12 using namespace std; int n,m; int a[N][N]; int b[4]={1,2,4,8}; bool vis[N][N]; int sum,maxx; int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}}; struct node {int x;int y; }q[N*100]; void bfs(int x0,int y0) {int head=1,tail=1;int cnt=1;vis[x0][y0]=1;q[tail].x=x0;q[tail].y=y0;tail++;while(head<tail){int x=q[head].x;int y=q[head].y;for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&(a[x][y]&b[i])==0){cnt++;vis[nx][ny]=1;q[tail].x=nx;q[tail].y=ny;tail++;}}head++;}if(cnt>maxx)maxx=cnt;sum++; } int main() {memset(vis,0,sizeof(vis));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(vis[i][j]==0)bfs(i,j);printf("%d\n%d\n",sum,maxx);return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的The Castle(信息学奥赛一本通-T1250)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。