zoukankan      html  css  js  c++  java
  • (匹配)Fire Net --hdu --1045

    链接:

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

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#problem/A

    一看原题,先用搜索写一下,还是要学学匹配吧!

    以前的代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define N 10
    #define INF 0x3f3f3f3f
    
    int n, ans;
    char G[N][N];
    
    bool judge(int x, int y)
    {
        int i;
    
        if(G[x][y]=='X')
            return false;
    
        for(i=x; i>=0; i--)
        {
            if(G[i][y]=='X')
                break;
            if(G[i][y]=='D')
                return false;
        }
    
        for(i=y; i>=0; i--)
        {
            if(G[x][i]=='X')
                break;
            if(G[x][i]=='D')
                return false;
        }
        return true;
    }
    
    void DFS(int z, int k)
    {
        int x, y;
    
        x = z/n;
        y = z%n;
    
        if(z==n*n)
        {
            ans = max(ans, k);
            return ;
        }
    
        if(judge(x, y))
        {
            G[x][y] = 'D';
            DFS(z, k+1);
            G[x][y] = '.';
        }
    
        DFS(z+1, k);
    }
    
    int main()
    {
        while(scanf("%d", &n),n)
        {
            int i;
    
            memset(G, 0, sizeof(G));
            for(i=0; i<n; i++)
                scanf("%s", G[i]);
    
            ans = 0;
            DFS(0, 0);
    
            printf("%d
    ", ans);
        }
        return 0;
    }

    不懂什么意思,先贴上

    匹配的代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define N 105
    #define INF 0x3f3f3f3f
    
    struct node{int x, y;}a[N][N];
    
    int n, p[N], used[N], x, y, G[N][N];
    char s[N][N];
    
    int Find(int u)
    {
        for(int i=1; i<=y; i++)
        {
            if(!used[i] && G[u][i])
            {
                used[i]=1;
                if(!p[i] || Find(p[i]))
                {
                    p[i] = u;
                    return true;
                }
            }
        }
        return false;
    }
    
    
    int main()
    {
        while(scanf("%d", &n),n)
        {
            int i, j;
    
            memset(s, 0, sizeof(s));
            for(i=0; i<n; i++)
                scanf("%s", s[i]);
    
            x = y = 0;
            for(i=0; i<n; i++)
            for(j=0; j<n; j++)
            {
                if(s[i][j]=='.')
                {
                    if(j==0 || s[i][j-1]=='X')
                        x++;
                    a[i][j].x = x;
                }
                if(s[j][i]=='.')
                {
                    if(j==0 || s[j-1][i]=='X')
                        y++;
                    a[j][i].y = y;
                }
            }
    
            memset(G, 0, sizeof(G));
            for(i=0; i<n; i++)
            for(j=0; j<n; j++)
            {
                if(s[i][j]=='.')
                {
                    int u = a[i][j].x;
                    int v = a[i][j].y;
                    G[u][v] = 1;
                }
            }
    
            int ans= 0;
            memset(p, 0, sizeof(p));
            for(i=1; i<=x; i++)
            {
                memset(used, 0, sizeof(used));
                if(Find(i)==true)
                    ans++;
            }
    
            printf("%d
    ", ans);
        }
        return 0;
    }
    勿忘初心
  • 相关阅读:
    如何在SpringMVC中使用REST风格的url
    c#实现的udt
    数据库查询服务化-缓存和分页
    c#常用数据库封装再次升级
    c#数据库连接池Hikari重构升级
    c# 常用数据库封装
    聊聊数据存储查询
    c#分析SQL语句
    c# 分析SQL语句中的表操作
    c#最近博文结尾
  • 原文地址:https://www.cnblogs.com/YY56/p/4718258.html
Copyright © 2011-2022 走看看