HDU 1045 Fire Net(图匹配)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define maxn 50
bool G[maxn][maxn];///重新构图存储
bool vis[maxn];///标记点是否被遍历过
char maps[maxn][maxn];///地图存储
int P[maxn];///第 i 行匹配的第 P[i]列
int n, m, N;///重构图后是m行 n列
struct Node
{
int x, y;
}NodeInfo[maxn][maxn];///保存每个点重构图后所在的行和列 bool Find(int u)
{
for(int i=; i<n; i++)
{
if(G[u][i] && !vis[i])
{
vis[i] = true;
if( P[i] == - || Find(P[i]))
{
P[i] = u;
return true;
}
}
}
return false;
}
void MakeMaps()
{
m = , n = ;///行标记 和 列标记 for(int i=; i<N; i++)///第 i 行
{
for(int j=; j<N; j++)
{
if(maps[i][j] == '.')
NodeInfo[i][j].x = m;
if(maps[i][j+] == 'X' || maps[i][j+] == )
m ++;
}
} for(int i=; i<N; i++)///第 i 列
{
for(int j=; j<N; j++)
{
if(maps[j][i] == '.')
NodeInfo[j][i].y = n;
if(maps[j+][i] == 'X' || maps[j+][i] == )
n ++;
}
} for(int i=; i<N; i++)
{
for(int j=; j<N; j++)
{
int x = NodeInfo[i][j].x;
int y = NodeInfo[i][j].y; if(maps[i][j] == '.')
G[x][y] = true;
}
}
} int main()
{
while(scanf("%d", &N), N)
{ memset(G, , sizeof(G));
memset(P, -, sizeof(P));
memset(maps, , sizeof(maps)); for(int i=; i<N; i++)
scanf("%s", maps[i]); MakeMaps();
int ans = ;
for(int i=; i<m; i++)
{
memset(vis, false, sizeof(vis));
if( Find(i) )
ans ++;
}
printf("%d\n", ans);
}
return ;
}

HDU 1045 Fire Net(图匹配)的更多相关文章
- HDU 1045 Fire Net(行列匹配变形+缩点建图)
题意:n*n的棋盘上放置房子.同一方同一列不能有两个,除非他们之间被墙隔开,这种话. 把原始图分别按行和列缩点 建图:横竖分区.先看每一列.同一列相连的空地同一时候看成一个点,显然这种区域不可以同一时 ...
- hdu 1045 Fire Net(二分匹配 or 暴搜)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1045 Fire Net 二分图匹配 && HDU-1281-棋盘游戏
题意:任意两个个'车'不能出现在同一行或同一列,当然如果他们中间有墙的话那就没有什么事,问最多能放多少个'车' 代码+注释: 1 //二分图最大匹配问题 2 //难点在建图方面,如果这个图里面一道墙也 ...
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
- HDU 1045 Fire Net 【连通块的压缩 二分图匹配】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- HDU 1045(Fire Net)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...
- hdu 1045 Fire Net(最小覆盖点+构图(缩点))
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS Memory Limit:32768KB ...
- HDU 1045 Fire Net(dfs,跟8皇后问题很相似)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045——Fire Net——————【最大匹配、构图、邻接矩阵做法】
Fire Net Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
随机推荐
- [Angular 2] Exposing component properties to the template
Showing you how you can expose properties on your Controller to access them using #refs inside of yo ...
- Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试
1. Collection集合的基本功能测试: package cn.itcast_01; import java.util.ArrayList; import java.util.Collectio ...
- IOS 开发 【os x 使用常识】
开始看<learn Objective-C on the Mac>这本书,很基础,准备快速看完. 刚接触mac 的 os x 系统,很不适应,介绍一点我刚学的基本常识. 1.os x 显示 ...
- VB指针 与CopyMemory
体会ByVal和ByRef Dim k As Long CopyMemory ByVal VarPtr(k), 40000, 4 等同于k=40000:从保存常数40000(缺省ByRef)的临时变量 ...
- Lock锁_线程_线程域
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Android 开发笔记——对应用进行单元测试
在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,是正规Android开发的必用技术, 在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 第一 ...
- c - 折半查找(二分法检索)
#include <stdio.h> #define LEN 10 /* 折半查找(二分法检索). */ int index_of(int *a, int k) { ; ; int m; ...
- for update和for update nowait的区别和使用
首先,for update 和for update nowait 是对操作的数据行进行加锁,在事务提交前防止其他操作对数据的修改. for update 和for update nowait主要区别在 ...
- Hibernate 一对多双向关联Demo
以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { privat ...
- 泛型,迭代器,LinkedList<E>
1 <e>里面只能填类,不能用基本数据类型,不过integer 这样的的也行 2在模板类(泛型类中)class demo<e>由于不知道e是那个,所有通常都是重写大家都有的to ...