(重)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\n",ID-ma/2) ;

    }

    return 0 ;

}
View Code

 

你可能感兴趣的:(ant)