国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 實現球迷 今日頭條面試題

2020-01-26 13:39:21
字體:
來源:轉載
供稿:網友

試題描述:

一個球場C的球迷看臺可容納M*N個球迷。官方想統計一共有多少球迷群體,最大的球迷群體有多少人。

球迷選座特性:同球迷群體會選擇相鄰座位,不同球迷群體選擇不相鄰的座位。(相鄰包括前后相鄰、左右相鄰、斜對角相鄰);

給定一個M*N的二維球場,0代表該位置沒人,1代表該位置有人,希望輸出球隊群體個數P,最大的球隊群體人數Q。

輸入:

第一行,2個數字,M、N,使用英文逗號隔開。
接下來M行,每行N個數字,使用英文逗號隔開。

輸出:

一行,2數字,P和Q。

輸入樣例:

10,10
0,0,0,0,0,0,0,0,0,0
0,0,0,1,1,0,1,0,0,0
0,1,0,0,0,0,0,1,0,1
1,0,0,0,0,0,0,0,1,1
0,0,0,1,1,1,0,0,0,1
0,0,0,0,0,0,1,0,1,1
0,1,1,0,0,0,0,0,0,0
0,0,0,1,0,1,0,0,0,0
0,0,1,0,0,1,0,0,0,0
0,1,0,0,0,0,0,0,0,0

輸出樣例:

6,8

其他:

對于100%的數據,1<=M,N<=3e3。

這道題是一道明顯的深度優先搜索,而且十分簡單。

但是在看到輸入示例后會發現每個數據的后面都存在著一個字符,而且回車也屬于字符。

所以我們要先對數據進行處理。

我們需要使用的的輔助工具就是getchar()了,不知道的人可以把getchar()作為一個爪子,每當一個char類型的字符被輸入后,getchar()就可以準確的捕捉到他。

但是getchar()是會忽略每行第一個字符的。

所以我們可以定義一個數組,在取完第一個數后再使用getchar()。就可以把所有的0和1存儲在一個n*m的二維數組中了。

再說dfs,就十分簡單了,只需要判斷可能走的8個方向,再使用一個計數器計數就可以了。

但是為了避免走重復的路,也是為了避免時間超限。所以我們可以定義一個bool類型的數組,記錄走過的路。

同時在主函數中做寫一個兩層的嵌套循環,找到每個1,再進行dfs。

也要注意使用scanf和printf。

在最后也需要使用一個putchar(),相當于是輸出一個字符。

論速度那個快       putchar(),getchar>scanf,printf>cin,cout。

#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<stdio.h>using namespace std;int n,m,l,k,sum,ans,cnt;char a[4000][4000],op;bool b[4000][4000]={0};int dfs(int x,int y){ if(a[x-1][y]=='1'&&b[x-1][y]==0) {  b[x-1][y]=1;  dfs(x-1,y);  ans++; } if(a[x][y+1]=='1'&&b[x][y+1]==0) {  b[x][y+1]=1;  dfs(x,y+1);  ans++; } if(a[x-1][y+1]=='1'&&b[x-1][y+1]==0) {  b[x-1][y+1]=1;  dfs(x-1,y+1);  ans++; } if(a[x+1][y]=='1'&&b[x+1][y]==0) {  b[x+1][y]=1;  dfs(x+1,y);  ans++; } if(a[x][y-1]=='1'&&b[x][y-1]==0) {  b[x][y-1]=1;  dfs(x,y-1);  ans++; } if(a[x+1][y-1]=='1'&&b[x+1][y-1]==0) {  b[x+1][y-1]=1;  dfs(x+1,y-1);  ans++; } if(a[x+1][y+1]=='1'&&b[x+1][y+1]==0) {  b[x+1][y+1]=1;  dfs(x+1,y+1);  ans++; } if(a[x-1][y-1]=='1'&&b[x-1][y-1]==0) {  b[x-1][y-1]=1;  dfs(x-1,y-1);  ans++; } return ans;}int main(){ scanf("%d%c%d",&n,&op,&m); for(int i=1;i<=n;i++) {  for(int j=1;j<=m;j++)  {    getchar();   a[i][j]=getchar();  } } for(int i=1;i<=n;i++) {  for(int j=1;j<=m;j++)  {   ans=0;   if(a[i][j]=='0')b[i][j]=1;    if(a[i][j]=='1'&&b[i][j]==0)    {    sum++;    cnt=max(cnt,dfs(i,j));    }  } } char p=','; printf("%d",sum); putchar(p); printf("%d",cnt); }

總結

以上所述是小編給大家介紹的C++ 實現球迷 今日頭條面試題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖南省| 新巴尔虎右旗| 镇雄县| 兰坪| 阿拉善盟| 辽中县| 卢湾区| 叙永县| 滕州市| 隆回县| 安宁市| 小金县| 阳山县| 临澧县| 大同县| 子长县| 井冈山市| 包头市| 阜平县| 油尖旺区| 广丰县| 彰化市| 清流县| 巴中市| 阳城县| 贞丰县| 灯塔市| 怀来县| 江川县| 渝中区| 闻喜县| 息烽县| 福泉市| 兴城市| 织金县| 蒙自县| 招远市| 都匀市| 大英县| 昌吉市| 聂荣县|