Educational Codeforces Round 5 C. The Labyrinth (DFS **)__搜尋

來源:互聯網
上載者:User
C. The Labyrinth time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

You are given a rectangular field of n × m cells. Each cell is either empty or impassable (contains an obstacle). Empty cells are marked with '.', impassable cells are marked with '*'. Let's call two empty cellsadjacent if they share a side.

Let's call a connected component any non-extendible set of cells such that any two of them are connected by the path of adjacent cells. It is a typical well-known definition of a connected component.

For each impassable cell (x, y) imagine that it is an empty cell (all other cells remain unchanged) and find the size (the number of cells) of the connected component which contains(x, y). You should do it for each impassable cell independently.

The answer should be printed as a matrix with n rows andm columns. Thej-th symbol of thei-th row should be "." if the cell is empty at the start. Otherwise thej-th symbol of the i-th row should contain the only digit —- the answer modulo10. The matrix should be printed without any spaces.

To make your output faster it is recommended to build the output as an array ofn strings having lengthm and print it as a sequence of lines. It will be much faster than writing character-by-character.

As input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to usescanf/printf instead ofcin/cout in C++, prefer to use BufferedReader/PrintWriter instead ofScanner/System.out inJava. Input

The first line contains two integers n, m (1 ≤ n, m ≤ 1000) — the number of rows and columns in the field.

Each of the next n lines contains m symbols: "." for empty cells, "*" for impassable cells. Output

Print the answer as a matrix as described above. See the examples to precise the format of the output. Sample test(s) Input

3 3*.*.*.*.*
Output
3.3.5.3.3
Input
4 5**..*..***.*.*.*.*.*
Output
46..3..732.6.4.5.4.3
Note

In first example, if we imagine that the central cell is empty then it will be included to component of size5 (cross). If any of the corner cell will be empty then it will be included to component of size3 (corner).



題意:給你一個地圖,讓你尋找'*'周圍'.'的個數,相互串連也算,結果對10取餘


思路:對每一個'.'進行搜尋,途中進行標記屬於哪個集團,然後將一個集團的點排入佇列,最後為其賦值,值為集團點數,最後檢查每個'*'所屬集團的異同。


總結:判斷所屬集團異同的時候WA了幾次,也是醉了。



ac代碼:

#include<stdio.h>#include<math.h>#include<string.h>#include<stack>#include<queue>#include<vector>#include<iostream>#include<algorithm>#define MAXN 1001000#define LL long long#define ll __int64#define INF 0x7fffffff#define mem(x) memset(x,0,sizeof(x))#define PI acos(-1)#define mod 1000000007using namespace std;int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};char map[1010][1010];int v[1010][1010];int cnt[1010][1010];int vv;int n,m;int num;struct s{int a,b;};queue<s>q;int check(int x,int y){if(x<0||x>=n||y<0||y>=m||v[x][y]||map[x][y]=='*')return 0;return 1;}void dfs(int x,int y){num++;v[x][y]=vv;for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];if(check(nx,ny)){s bb;bb.a=nx;bb.b=ny;q.push(bb);dfs(nx,ny);}}}int main(){int i,j;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++)scanf("%s",map[i]);//for(i=0;i<n;i++)//printf("%s\n",map[i]);vv=1;mem(cnt);mem(v);for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='*'||v[i][j])continue;num=0;dfs(i,j);//printf("%d\n",vv);cnt[i][j]=num;vv++;while(!q.empty()){s aa=q.front();q.pop();cnt[aa.a][aa.b]=cnt[i][j];}}}for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='.')printf(".");else//就是這WA了幾次{int ccnt=1;int aa[5];int cc=0;for(int w=0;w<4;w++){int nx=i+dir[w][0];int ny=j+dir[w][1];if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]=='.'){int bz=0;for(int e=0;e<cc;e++){if(aa[e]==v[nx][ny]){bz=1;break;}}if(bz==0){aa[cc++]=v[nx][ny];ccnt+=cnt[nx][ny];}}}ccnt=ccnt%10;printf("%d",ccnt);}}printf("\n");}}return 0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.