zoukankan      html  css  js  c++  java
  • Codeforces 515D Drazil and Tiles

    题意:给你一个图,包含空格 。 和墙* , 你现在要在空格处放置1x2的格子使得空白处全部填满,问你是否是 (有解或者多个解) 还是(只有一个解).

    解题思路:这个题图太大了,显然不能用DLX或者状压dp,应该怎么样能,我们知道 如果一个空白边上三面都是墙或者已经填被填上了,那这个空白只有一种填法,

    然后根据这个性质去进行搜索就能个得到是否只有一个解了。

    解题代码:

      1 // File Name: b.cpp
      2 // Author: darkdream
      3 // Created Time: 2015年02月18日 星期三 01时06分26秒
      4 
      5 #include<vector>
      6 #include<list>
      7 #include<map>
      8 #include<set>
      9 #include<deque>
     10 #include<stack>
     11 #include<bitset>
     12 #include<algorithm>
     13 #include<functional>
     14 #include<numeric>
     15 #include<utility>
     16 #include<sstream>
     17 #include<iostream>
     18 #include<iomanip>
     19 #include<cstdio>
     20 #include<cmath>
     21 #include<cstdlib>
     22 #include<cstring>
     23 #include<ctime>
     24 #include<queue>
     25 #define LL long long
     26 
     27 using namespace std;
     28 char str[2004][2004];
     29 struct node{
     30   int x, y ; 
     31   node()
     32   {}
     33   node(int _x,int _y)
     34   {
     35      x= _x; 
     36      y= _y;
     37   }
     38 };
     39 queue <node> q3;
     40 void cheack(int x, int y)
     41 {
     42    if(str[x][y] == '.' )
     43    {
     44       int sum = 0 ; 
     45       if(str[x][y+1] == '.')
     46        sum ++;
     47       if(str[x][y-1] == '.')
     48        sum ++;
     49       if(str[x+1][y] == '.')
     50        sum ++;
     51       if(str[x-1][y] == '.')
     52        sum ++;
     53       if(sum == 1) 
     54           q3.push(node(x,y));
     55    }
     56 }
     57 void cheackaround(int x, int y)
     58 {
     59    cheack(x,y-1);
     60    cheack(x,y+1);
     61    cheack(x+1,y);
     62    cheack(x-1,y);
     63 }
     64 void solve()
     65 {
     66     while(q3.size() != 0 )
     67     {
     68       node tmp = q3.front();
     69       q3.pop();
     70       int x = tmp.x;
     71       int y = tmp.y;
     72       if(str[x][y+1] == '.')
     73       {
     74          str[x][y] = '<';
     75          str[x][y+1] = '>';
     76          cheackaround(x,y+1);
     77       }
     78       if(str[x][y-1] == '.')
     79       {
     80         str[x][y] = '>';
     81         str[x][y-1] = '<';
     82         cheackaround(x,y-1);
     83       }
     84       if(str[x+1][y] == '.')
     85       {
     86         str[x][y] = '^';
     87         str[x+1][y] = 'v';
     88         cheackaround(x+1,y);
     89       }
     90       if(str[x-1][y] == '.')
     91       {
     92         str[x][y] = 'v';
     93         str[x-1][y] = '^';
     94         cheackaround(x-1,y);
     95       }
     96     }
     97 }
     98 int main(){
     99    int n , m; 
    100    scanf("%d %d",&n,&m);
    101    for(int i = 1;i <= n;i ++)
    102    {
    103      scanf("%s",&str[i][1]);
    104    }
    105    for(int i = 1;i <= n;i ++)
    106        for(int j = 1;j <= m;j ++)
    107        {
    108           cheack(i,j);    
    109        }
    110    solve();
    111    for(int i = 1;i <= n;i ++)
    112        for(int j= 1;j <= m; j ++)
    113        {
    114          if(str[i][j] == '.')
    115          {
    116            printf("Not unique
    ");
    117            return 0 ; 
    118          }
    119        }
    120    for(int i = 1;i <= n;i ++)
    121        printf("%s
    ",&str[i][1]);
    122 
    123 return 0;
    124 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    Admin注册和路由分发详解
    自定义Xadmin
    苑昊老师的博客
    pip 国内源 配置
    Django模型层(2)
    Django 中间件
    Django form表单
    整理的最全 python常见面试题(基本必考)
    AJAX
    Cookie、Session和自定义分页
  • 原文地址:https://www.cnblogs.com/zyue/p/4372941.html
Copyright © 2011-2022 走看看