• hdu 1045


    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1045

    题意:给定一个最大4*4的方形地图,里面有墙(X)和空地(.)。在每个空地上可以放大炮,但两个大炮如果在同一行或同一列并且之间没有墙阻隔的话,会互相攻击,所以不能同时存在。问最多能放多少个大炮。

    mark:数据小,直接dfs就可以了。1WA,把保存状态的数组开成了全局的- -。据说还可以二分匹配过。

    代码:

     1 # include <stdio.h>
     2 # include <string.h>
     3 
     4 
     5 char g[4][4] ;
     6 int vis[4][4] ;
     7 int n, ans ;
     8 int tab[4][2] = {0,1,0,-1,1,0,-1,0} ;
     9 
    10 
    11 void dfs(int pos, int num)
    12 {
    13     int x = pos/n, y = pos%n ;
    14     int xx, yy, i, j ;
    15     int buff[4][4] ;
    16 //    if(pos==n*n) return ;
    17     if (g[x][y]=='X')return ;
    18     if (vis[x][y]==1) return ;
    19 
    20     for(i=0;i<n;i++)for(j=0;j<n;j++)buff[i][j]=vis[i][j];
    21     vis[x][y]=1;
    22     for(i=0;i<4;i++)
    23     {
    24         for(xx=x+tab[i][0],yy=y+tab[i][1] ;
    25             xx>=0&&xx<n&&yy>=0&&yy<n&&g[xx][yy]=='.';
    26             xx+=tab[i][0],yy+=tab[i][1])
    27             vis[xx][yy]=1 ;
    28     }
    29     if(num+1>ans)ans=num+1;
    30     for(i=pos+1;i<n*n;i++)dfs(i,num+1);
    31     for(i=0;i<n;i++)for(j=0;j<n;j++)vis[i][j]=buff[i][j];
    32 }
    33 
    34 
    35 int main ()
    36 {
    37     int i ;
    38     while (~scanf("%d",&n)&&n)
    39     {
    40         for(i=0;i<n;i++) scanf("%s",g[i]) ;
    41         memset(vis,0,sizeof(vis)) ;
    42         ans=0;
    43         for(i=0;i<n*n;i++)dfs(i,0) ;
    44         printf("%d\n", ans) ;
    45     }
    46     return 0 ;
    47 }
  • 相关阅读:
    Javascript 基础知识整理
    设计模式
    Flex 布局
    CSS选择器,属性前缀,长度单位,变形效果,过渡效果,动画效果
    CSS中一些重要概念
    性能优化(CSS优化)
    CSS定位走一波(定位学习续)
    定位布局
    浮动布局
    Display属性学习总结
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2514154.html
Copyright © 2020-2023  润新知