hdu4499Cannon dfs暴搜

原创 2015年11月17日 16:06:24
//在一个n*m(n,m<=5)的棋盘上原来放着棋子
//在棋盘的空位上放炮,要求一个炮不能吃到
//另一个
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 10 ;
int map[maxn][maxn] ;
int n , m ;
int judge(int i , int j)
{
    int flag = 0 ;
    for(int k = i+1;k <= n;k++){
       if(map[k][j]==2&&flag==1){
            return false ;
        }
        if(map[k][j]){
            flag++ ;
        }
    }
    flag = 0;
    for(int k = i-1;k > 0;k--){
        if(map[k][j]==2&&flag==1){
            return false ;
        }
        if(map[k][j]){
            flag++ ;
        }
    }
    flag = 0 ;
    for(int k = j+1;k <= m;k++){
       if(map[i][k]==2&&flag==1){
           return false ;
       }
       if(map[i][k]){
          flag++;
       }
    }
    flag = 0 ;
    for(int k = j-1;k > 0;k--){
        if(map[i][k]==2&&flag==1){
            return false ;
        }
        if(map[i][k]){
            flag++;
        }
    }
    return true ;
}
int dfs(int x , int y ,int sum)
{
    y++ ;
    if(y == m+1){
       x++ ;
       y = 1 ;
    }
    if(x == n+1){
       return sum ;
    }
    int ans = 0 ;
    ans = dfs(x , y , sum) ;
    if(map[x][y] == 0){
        map[x][y] = 2 ;
        if(judge(x,y))
        ans = max(ans , dfs(x , y , sum+1)) ;
        map[x][y] = 0 ;
    }
    return ans ;
}
int main()
{
    int q ;
    while(~scanf("%d%d%d" , &n , &m , &q)){
        memset(map , 0 , sizeof(map)) ;
        for(int i = 1;i <= q;i++){
            int a , b ;
            scanf("%d%d" , &a , &b) ;
            map[a+1][b+1] = 1 ;
        }

        printf("%d\n" , dfs(1,0 , 0)) ;
    }
    return 0 ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HDU-4499 Cannon (DFS)

很简单的搜索,但是还是WA了好久,按行枚举总出错(已经考虑每行可以放三个的情况),改成按点枚举就AC。。。...

hdu4499 Cannon DFS

Cannon Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Sub...

hdu4499 Cannon (DFS+回溯)

DFS+回溯

hdu 4499 Cannon(DFS)

2013年ACM亚洲赛区通化邀请赛的G题...还在练习中...

hdu 4499 Cannon dfs

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4499题意:在一个象棋棋盘上放炮,要求两个炮不能互相打到,然后问你最多能放几个炮题解:dfs 一直dfs...
  • yxg_123
  • yxg_123
  • 2017年02月26日 20:01
  • 56

HDU 4499 Cannon (暴力搜索,回溯)

Cannon Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total ...
  • YJX_xx
  • YJX_xx
  • 2014年06月30日 10:49
  • 469

HDU - 3699 A hard Aoshu Problem(暴搜dfs)

点击打开题目链接 A hard Aoshu Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 62768/32...

hdu 1426 Sudoku Killer(DFS暴搜)

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=1426 思路: 记录下‘?’的位置,挨个位置从1-9暴搜。 关键在于处理好输入。 代...

hdu 2514 Another Eight Puzzle(DFS暴搜)

原题链接: hdu 2514 题目大意: 任意两个连线相邻的数,不能连续。即abs(x-y)!=1 思路: 与数独题做法如出一辙。 用DFS暴搜所有情况,对结果进行检查。 ...

hdu 5355 Cake dfs暴搜 构造

题意:把有n块蛋糕, 大小分别是1-n。 分给m个人, 个数随便,大小和要全相等。 做法:其实那两个不合法的情况,做比赛时队友已经发现了。后来按照 最大的 和某一个小的数 凑对,贪心来做。 比赛时A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu4499Cannon dfs暴搜
举报原因:
原因补充:

(最多只允许输入30个字)