http://codeforces.com/problemset/problem/377/A点击打开链接
#include <iostream>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <stack>
#include <limits>
#include <string>
#include <string.h>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
using namespace std;
char mmap[555][555];
int book[555][555];
int dir[4][2]={0,1,1,0,-1,0,0,-1};
struct xjy
{
int x;
int y;
};
queue<xjy> q;
vector<xjy> ans;
vector<xjy>::iterator it;
int x;int y;
void bfs()
{
xjy mid;
mid.x=x;
mid.y=y;
q.push(mid);
while(!q.empty())
{
mid=q.front();
q.pop();
ans.push_back(mid);
xjy midmid;
for(int i=0;i<4;i++)
{
midmid.x=mid.x+dir[i][0];
midmid.y=mid.y+dir[i][1];
if(mmap[midmid.x][midmid.y]!='#'&&book[midmid.x][midmid.y]==0)
{
q.push(midmid);
book[midmid.x][midmid.y]=1;
}
}
}
}
int main()
{
memset(mmap,'#',sizeof(mmap));
int n;int m;int k;
scanf("%d%d%d",&n,&m,&k);
getchar();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%c",&mmap[i][j]);
if(mmap[i][j]=='.')
{
x=i;
y=j;
}
}
getchar();
}
book[x][y]=1;
bfs();
for(it=ans.end()-1;it!=ans.end()-1-k;it--)
{
mmap[(*it).x][(*it).y]='X';
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%c",mmap[i][j]);
}
printf("\n");
}
}