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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

信息学奥赛一本通(1216:红与黑)

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

1216:紅與黑


時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB
提交數(shù): 17280 ??? 通過數(shù): 6739

【題目描述】

有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫一個程序,計算你總共能夠到達多少塊黑色的瓷磚。

【輸入】

包括多組數(shù)據(jù)。每組數(shù)據(jù)的第一行是兩個整數(shù)W和H,分別表示x方向和y方向瓷磚的數(shù)量。W和H都不超過20。在接下來的H行中,每行包括W個字符。每個字符表示一塊瓷磚的顏色,規(guī)則如下:

1)‘.’:黑色的瓷磚;

2)‘#’:白色的瓷磚;

3)‘@’:黑色的瓷磚,并且你站在這塊瓷磚上。該字符在每組數(shù)據(jù)中唯一出現(xiàn)一次。

當在一行中讀入的是兩個零時,表示輸入結(jié)束。

【輸出】

對每組數(shù)據(jù),分別輸出一行,顯示你從初始位置出發(fā)能到達的瓷磚數(shù)(記數(shù)時包括初始位置的瓷磚)。

【輸入樣例】

6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0

【輸出樣例】

45

【分析】

? ? ? ? 下圖就是這道題的原型,灰色的也代表黑色,是人物站立的地方,所求的結(jié)果是黑色方塊連接的塊數(shù)一共是多少個?同水洼題目,如果用DFS求解,不用回溯。

【參考代碼】

#include <stdio.h> #include <string.h> #define N 1001int maps[N][N]; //瓷磚矩陣 int w,h; //瓷磚規(guī)模 int cnt; //統(tǒng)計瓷磚數(shù)int vis[N][N]; //訪問數(shù)組 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; //方向數(shù)組void dfs(int x,int y) {int i,nx,ny;for(i=0;i<4;i++){nx=x+dir[i][0];ny=y+dir[i][1];if(nx>=1 && ny>=1 && nx<=h && ny<=w && vis[nx][ny]==0 && maps[nx][ny]==1){vis[nx][ny]=1;cnt++;dfs(nx,ny);//vis[nx][ny]=0; 本題同水洼題目,不用回溯,否則超時}} } int main() {int i,j,x,y;char ch;while(scanf("%d%d",&w,&h) && w || h){getchar();cnt=1;memset(vis,0,sizeof(vis));memset(maps,0,sizeof(maps));for(i=1;i<=h;i++){for(j=1;j<=w;j++){scanf("%c",&ch);if(ch=='@'){x=i;y=j;maps[i][j]=1;}if(ch=='.')maps[i][j]=1;if(ch=='#')maps[i][j]=0;}getchar();}vis[x][y]=1;dfs(x,y);printf("%d\n",cnt);}return 0; }

http://ybt.ssoier.cn:8088/problem_show.php?pid=1216

?

總結(jié)

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

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