码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #222 (Div. 1) A. Maze

时间:2015-05-14 18:41:44      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:图论   dfs   

题意:有n*m矩阵,‘.‘为空地,‘#‘为墙。在空地上添加k堵墙使得最后空地联通。保证有解。

思路:随便送任何一个空地走,走到不能走为止,那么这个位置就可以设为‘X‘。然后回溯将路径上的空地都设为‘x‘。很明显最后的图是联通的。


#include<bits/stdc++.h>
using namespace std;
int n,m,k;
char ch[501][501];
int vis[501][501];
void dfs(int x,int y)
{
    if(x<1||x>n||y<1||y>m||ch[x][y]!='.'||vis[x][y]) return ;
    vis[x][y]=1;
    dfs(x+1,y);dfs(x-1,y);
    dfs(x,y+1);dfs(x,y-1);
    if(k) ch[x][y]='X',k--;
}
int main()
{
    int i,j;
    cin>>n>>m>>k;
    for(i=1;i<=n;i++)
        cin>>ch[i]+1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(ch[i][j]=='.'&&k) dfs(i,j);
    for(i=1;i<=n;i++) puts(ch[i]+1);
}


Codeforces Round #222 (Div. 1) A. Maze

标签:图论   dfs   

原文地址:http://blog.csdn.net/caoyi0905/article/details/45724571

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!