cf C. Maze

http://codeforces.com/problemset/problem/378/C

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 550
 5 using namespace std;
 6 
 7 int n,m,k;
 8 char g[maxn][maxn];
 9 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
10 bool vis[maxn][maxn];
11 
12 void dfs(int x,int y)
13 {
14     vis[x][y]=true;
15     for(int i=0; i<4; i++)
16     {
17         int xx=x+dir[i][1];
18         int yy=y+dir[i][0];
19         if(xx>=0&&xx<n&&yy>=0&&y<m&&!vis[xx][yy]&&g[xx][yy]=='.')
20         {
21             dfs(xx,yy);
22         }
23     }
24     if(k)
25     {
26         g[x][y]='X';
27         k--;
28     }
29 }
30 
31 int main()
32 {
33     while(scanf("%d%d%d",&n,&m,&k)!=EOF)
34     {
35         memset(vis,false,sizeof(vis));
36         for(int i=0; i<n; i++)
37         {
38             scanf("%s",g[i]);
39         }
40         for(int i=0; i<n; i++)
41         {
42             for(int j=0; j<m; j++)
43             {
44                 if(!vis[i][j]&&g[i][j]=='.'&&k)
45                 {
46                     dfs(i,j);
47                 }
48             }
49         }
50         for(int i=0; i<n; i++)
51         {
52             for(int j=0; j<m; j++)
53             {
54                 printf("%c",g[i][j]);
55             }
56             printf("
");
57         }
58     }
59     return 0;
60 }
View Code
原文地址:https://www.cnblogs.com/fanminghui/p/3989040.html