1.题目描述:
给你一个房间,已经放了几张桌子,要你在空的地方继续放k张,输出放完以后的图。
3.解题思路:
直接dfs扫完以后模拟就好
4.AC代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <functional>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <ctime>
#define INF 0x7fffffff
#define maxn 505
#define eps 1e-6
#define pi acos(-1.0)
#define e 2.718281828459
#define mod (int)1e9 + 7;
using namespace std;
char mp[maxn][maxn];
bool vis[maxn][maxn];
int n, m, k;
int dir[4][2] = { {0 , 1}, {1, 0}, {0, -1}, {-1, 0} };
void dfs(int x, int y)
{
if (x < 0 || x >= n || y < 0 || y >= m || mp[x][y] != '.' || vis[x][y])
return;
vis[x][y] = true;
for (int i = 0; i < 4; i++)
{
int dx = x + dir[i][0];
int dy = y + dir[i][1];
dfs(dx, dy);
}
if (k)
{
mp[x][y] = 'X';
k--;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
long _begin_time = clock();
#endif
while (scanf("%d%d%d", &n, &m, &k) != EOF)
{
for (int i = 0; i < n; i++)
scanf("%s", mp[i]);
for (int i = 0; i < n && k; i++)
{
for (int j = 0; j < m && k; j++)
{
dfs(i, j);
}
}
for (int i = 0; i < n; i++)
printf("%s\n", mp[i]);
}
#ifndef ONLINE_JUDGE
long _end_time = clock();
printf("time = %ld ms\n", _end_time - _begin_time);
#endif
return 0;
}