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("\n");

57         }

58     }

59     return 0;

60 }
View Code

 

你可能感兴趣的:(c)