zoukankan      html  css  js  c++  java
  • (重)POJ 3020Antenna Placement

    http://poj.org/problem?id=3020

    呃。。。这个题不是很会,所以找了大神的博客做了参考,说得很详细

    http://blog.csdn.net/lyy289065406/article/details/6647040

    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    using namespace std ;
    const int maxn = 450 ;
    int map[maxn][maxn] ;
    int ID ;
    int v1,v2 ;
    int ma ;
    bool city[maxn][maxn] ;
    bool vist[maxn] ;
    int link[maxn] ;
    int dirr[4] = {-1,1,0,0} ;
    int dirc[4] = {0,0,-1,1} ;
    bool dfs(int x)
    {
        for(int i = 1 ; i <= v2 ; i++)
        {
            if(city[x][i] && !vist[i])
            {
                vist[i] = true ;
                if(link[i] == 0 || dfs(link[i]))
                {
                    link[i] = x ;
                    return true ;
                }
            }
        }
        return false ;
    }
    void sea()
    {
        for(int i = 1 ; i <= v1 ; i++)
        {
            memset(vist, 0,sizeof(vist)) ;
            if(dfs(i))
            ma++ ;
        }
        return  ;
    }
    int main()
    {
        int t ;
        scanf("%d",&t) ;
        while(t--)
        {
            memset(map,0,sizeof(map)) ;
            memset(city,0,sizeof(city)) ;
            memset(link,0,sizeof(link)) ;
            ID = 0 ;
            ma = 0 ;
            int h,w ;
            scanf("%d %d",&h,&w) ;
            char temp ;
            for(int i = 1 ; i <= h ; i++)
            {
                for(int j = 1 ; j <= w ; j++)
                {
                    cin>>temp ;
                    if(temp == '*')
                    map[i][j] = ++ ID ;
                }
            }
            for(int i = 1 ; i <= h ; i++)
            {
                for(int j = 1 ; j <= w ; j++)
                {
                    if(map[i][j])
                    {
                        for(int k = 0 ; k < 4 ; k++)
                        {
                            int x = i+dirr[k] ;
                            int y = j+dirc[k] ;
                            if(map[x][y])
                            city[map[i][j]][map[x][y]] = true ;
                        }
                    }
                }
            }
            v1 = v2 = ID ;
            sea() ;
            printf("%d
    ",ID-ma/2) ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    javascript基础必学点
    怎样学习jQuery
    新手如何学习jQuery
    如何安装软件
    最近遇到的C++数字和字符串的转换问题
    二叉搜索树
    C++类型的转换
    希尔排序
    C语言里字符串的解析
    remove_if的问题
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3489756.html
Copyright © 2011-2022 走看看