• poj 3020 Antenna Placement(二分图+最小路径覆盖)


    马虎了一下,少些了个=号,错了N 遍
    http://poj.org/problem?id=3020
    #include<stdio.h>
    #include<string.h>
    #define N 1000
    int a,h,w;
    char str[N][N];
    int map[N][N],vis[N],result[N];
    int bian(int x,int y)
    {
        if(x>=0&&x<=h&&y>=0&&y<=w)
        {
            if(str[x][y]=='*')
        {
            return x*w+y;
        }
        return -1;
        }
        return -1;
    
    
    
    }
    void link(int x,int y)
    {
         a=bian(x,y);
        if(bian(x-1,y)!=-1)
        {
            int b=bian(x-1,y);
            map[a][b]=1;
    
        }
        if(bian(x,y+1)!=-1)
        {
            int b=bian(x,y+1);
            map[a][b]=1;
    
        }
        if(bian(x+1,y)!=-1)
        {
            int b=bian(x+1,y);
            map[a][b]=1;
    
        }
        if(bian(x,y-1)!=-1)
        {
            int b=bian(x,y-1);
            map[a][b]=1;
    
        }
    
    }
    int  dfs(int x)
    {
    
        int i;
        for(i=0;i<=a;i++)
        {
            if(!vis[i]&&map[x][i]==1)
            {
                vis[i]=1;
                if(result[i]==0||dfs(result[i]))
                {
                    result[i]=x;
                    return 1;
    
                }
            }
        }
        return 0;
    
    }
    int main()
    {
        int l,i,j,sum;
        scanf("%d",&l);
        while(l--)
        {
            scanf("%d%d",&h,&w);
            memset(result,0,sizeof(result));
            memset(map,0,sizeof(map));
            sum=0;
            getchar();
            for(i=0;i<h;i++)
            {
                scanf("%s",str[i]);
            }
            for(i=0;i<h;i++)
            {
                for(j=0;j<w;j++)
                {
                    if(str[i][j]=='*')
                    {
                        link(i,j);
                        sum++;
                    }
                }
            }
    
            int ans=0;
            for(i=0;i<=a;i++)
            {
                memset(vis,0,sizeof(vis));
                if(dfs(i))ans++;
            }
    
            printf("%d\n",sum-ans/2);
        }
    }
    

      

  • 相关阅读:
    TensorFlow函数(七)tf.argmax()
    Harbor 1.8.0 仓库的安装和使用
    Rust基础笔记:闭包
    docker-compose搭建单机多节点es + kibana
    Filebeat+Logstash+Elasticsearch测试
    filebeat 笔记
    ELK笔记
    manjaro i3 配置笔记
    manjaro 下golang protobuf的使用
    go 算法
  • 原文地址:https://www.cnblogs.com/acSzz/p/2384138.html
Copyright © 2020-2023  润新知