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 }