poj 1719 Shooting Contest

本文介绍了一种基于行列匹配的算法实现,通过实例演示了如何利用该算法进行匹配判断,并提供了完整的C++代码实现。该算法适用于解决特定类型的匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //行与列匹配,若ans>=r,则可匹配,无匹配的列任意输出一white square即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int ans, r, c, linked[1005][1005], match[1005], visited[1005];

void init(){
    int i, x;
    ans=0;
    scanf("%d%d", &r, &c);
    memset(match, -1, sizeof(match));
    memset(linked, 0, sizeof(linked));
    for(i=0; i<2*c; i++){
        scanf("%d", &x);
        linked[i/2][x-1]=1;
    }
}

bool find(int x){
    for(int i=0; i<c; i++){
        if(linked[i][x]&&!visited[i]){
            visited[i]=1;
            if(match[i]==-1||find(match[i])){
                match[i]=x;
                return true;
            }
        }
    }
    return false;
}
int main(){
    //freopen("1.txt", "r", stdin);
 int T, i, j;
 scanf("%d", &T);
 while(T--){
     init();
        for(i=0; i<r; i++){
            memset(visited, 0, sizeof(visited));
            if(find(i))
            ans++;
        }
        if(ans<r){
            printf("NO\n");
        }
        else {
            if(match[0]>=0)
                printf("%d", match[0]+1);
            else {
            for(j=0; j<r; j++)
                if(linked[0][j]){
                    printf("%d", j+1);
                    break;
                }
            }
            for(i=1; i<c; i++){
                if(match[i]>=0)
                printf(" %d", match[i]+1);
                else {
                    for(j=0; j<r; j++){
                        if(linked[i][j]){
                            printf(" %d", j+1);
                            break;
                        }
                    }
                }
            }
            printf("\n");
        }
 }
 return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值