zoukankan      html  css  js  c++  java
  • cf E. Neatness

    http://codeforces.com/contest/359/problem/E

    题意:要关掉所有房间的灯,一个步骤要么开灯,要么关灯,要么向有灯的方向前进一格。输出一种关掉所有灯的方案。不能关掉所有灯输出NO

    往前搜索时点灯,后退时关灯。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 505
     5 using namespace std;
     6 
     7 bool flag;
     8 int n,sx,sy;
     9 int t1,t2;
    10 int g[maxn][maxn];
    11 int vis[maxn][maxn];
    12 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    13 char dir1[4]={'D','U','R','L'};
    14 char path[1000010];
    15 
    16 bool deal(int x,int y)
    17 {
    18     if(x>=0&&x<n&&y>=0&&y<n&&!vis[x][y]) return true;
    19     return false;
    20 }
    21 bool ok(int x,int y,int i)
    22 {
    23     int xx=x+dir[i][0];
    24     int yy=y+dir[i][1];
    25     while(deal(xx,yy))
    26     {
    27         if(g[xx][yy]==1) return true;
    28         xx+=dir[i][0];
    29         yy+=dir[i][1];
    30     }
    31     return false;
    32 }
    33 
    34 void dfs(int x,int y)
    35 {
    36     if(!g[x][y])
    37     {
    38         g[x][y]=1;
    39         path[t1++]='1';
    40         t2++;
    41     }
    42     vis[x][y]=1;
    43     for(int i=0; i<4; i++)
    44     {
    45         int xx=x+dir[i][0];
    46         int yy=y+dir[i][1];
    47         if(!vis[xx][yy]&&deal(xx,yy)&&ok(x,y,i))
    48         {
    49             path[t1++]=dir1[i];
    50             dfs(xx,yy);
    51             path[t1++]=dir1[i^1];
    52         }
    53     }
    54     path[t1++]='2';
    55     t2--;
    56 }
    57 
    58 int main()
    59 {
    60     while(scanf("%d%d%d",&n,&sx,&sy)!=EOF)
    61     {
    62         t2=0;
    63         memset(vis,false,sizeof(vis));
    64         for(int i=0; i<n; i++)
    65         {
    66             for(int j=0; j<n; j++)
    67             {
    68                 scanf("%d",&g[i][j]);
    69                 if(g[i][j]==1) t2++;
    70             }
    71         }
    72         t1=0;
    73         dfs(sx-1,sy-1);
    74         if(t2) printf("NO
    ");
    75         else
    76         {
    77             printf("YES
    ");
    78             printf("%s
    ",path);
    79         }
    80     }
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    Linux 下安装 numpy 和 scipy
    排序算法总结
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    Java读取Excel并解析文本(并格式化输出)
    快捷键记忆
    初级应该学习的
    深入理解加密、解密、数字签名和数字证书
    数据签名和验签
    POI结构与常用类
    exlipse继承反编译插件
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3939849.html
Copyright © 2011-2022 走看看