hdu1045 DFS
- #include<stdio.h>
- #include<string.h>
- int n;
- int maxx;
- char map[][];
- int dx[]={,-,,};
- int dy[]={,,,-};
- int block[][][];//炮台位置
- bool ok(int x,int y){
- int i,x1,y1;
- if(map[x][y]!='.')
- return false;
- for(i=;i<;i++){
- x1=x+dx[i];
- y1=y+dy[i];
- while(){
- if(x1<||x1>=n||y1<||y1>=n||map[x1][y1]=='X')//遇到边界跳出来
- break;
- else if(map[x1][y1]=='')//遇到'X'跳出来
- return false;
- x1+=dx[i];
- y1+=dy[i];//没有的话就沿着行和列一直找
- }
- }
- return true;
- }
- void dfs(int k){
- int i,j;
- for(i=;i<n;i++){
- for(j=;j<n;j++){
- if(ok(i,j)){//判断是否能放置
- map[i][j]='';//如果能将其所在行和列标记为'1',不能放置直到碰到'X'
- dfs(k+);//成功放置的话就加1
- map[i][j]='.';//回溯
- }
- }
- if(maxx<k){//寻找最大数量
- maxx=k;
- }
- }
- }
- int main(){
- int i,j;
- while(scanf("%d",&n)!=EOF&&n){
- maxx=;
- for(i=;i<n;i++){
- scanf("%s",map[i]);
- }
- dfs();
- printf("%d\n",maxx);
- }
- return ;
- }
二分图方法:
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- int n1,n2;
- char map[][]; //数组开大点
- int mapx[][],mapy[][];
- int ma[][];//邻接矩阵true代表有边相连
- int result[],visit[];
- int x,y;
- int find(int a){
- int i;
- for(i=;i<=y;i++){
- if(!visit[i]&&ma[a][i]){//如果节点i与a相邻并且未被查找过
- visit[i]=;//标记i为已查找过
- if(!result[i]||find(result[i])){//如果i未在前一个匹配M中或者i在匹配M中,但是从与i相邻的节点出发可以有增广路
- result[i]=a;//记录查找成功记录
- return ;
- }
- }
- }
- return ;
- }
- int main(){
- int i,j,ans;
- while(scanf("%d",&n1)!=EOF&&n1){
- n2=n1;
- for(i=;i<n1;i++){
- scanf("%s",map[i]);
- }
- memset(mapx,,sizeof(mapx));
- memset(mapy,,sizeof(mapy));
- x=;
- for(i=;i<n1;i++){
- for(j=;j<n2;j++){
- if(map[i][j]=='.'){
- ++x;
- while(j<n2&&map[i][j]=='.'){
- mapx[i][j]=x;
- j++;
- }
- }
- }
- }
- y=;
- for(j=;j<n2;j++){
- for(i=;i<n1;i++){
- if(map[i][j]=='.'){
- ++y;
- while(i<n1&&map[i][j]=='.'){
- mapy[i][j]=y;
- i++;
- }
- }
- }
- }
- for(i=;i<n1;i++){
- for(j=;j<n2;j++){
- ma[mapx[i][j]][mapy[i][j]]=;
- }
- }
- ans=;
- memset(result,,sizeof(result));
- for(i=;i<=x;i++){
- memset(visit,,sizeof(visit));//清空上次搜索时的标记
- ans+=find(i); //从节点i尝试扩展
- }
- printf("%d\n",ans);
- }
- return ;
- }
hdu1045 DFS的更多相关文章
- HDU1045 Fire Net(DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU1045 Fire Net(DFS枚举||二分图匹配) 2016-07-24 13:23 99人阅读 评论(0) 收藏
Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...
- HDU1045:Fire Net(二分图匹配 / DFS)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 【HDU-1045,Fire Net-纯暴力简单DFS】
原题链接:点击! 大致题意:白块表示可以放置炮台的位置——每个炮台可以攻击到上下左右的直线上的炮台(也就是说在它的上下左右直线上不可以再放置炮台,避免引起互相攻击),黑块表示隔离墙的位置——不可放 ...
- hdu1045 炮台的配置 dfs
只要炮台在同一行或者同一列,就可以互相摧毁,遇到墙则无法对墙后的炮台造成伤害,可以通过dfs搜索n*n的方格,全部搜完算一轮,计算炮台数,并保存其最大值. 其中对于t编号的炮台,位置可以计算出是(t/ ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
随机推荐
- 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- Ajax入门(一)
最近开始学习Ajax了0.0,虽然其他的还没巩固,但既然学了就先写下来吧... Ajax的定义呢,百度吧= =...就觉得最实用的地方就是页面无刷新,但网页实现了与后台的同步更新. 1, 首先创建 ...
- Windows10下安装OpenSSL
Windows10下安装的方法 安装环境:Windows10专业版+VS2013 工具:ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi,下载地址:http: ...
- 用css3做一个正方体
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 进度条投票-W
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- NOIP2016滚粗记
想了好久还是决定要写... Day0 Day-5得感冒一直没好,连磕5天药丸. 早晨得知爸妈都要上班并不能送我到校的消息,于是计划10:30集合,定表8:45准备自己走去学校. 然后平常睡得有点晚,结 ...
- Linux终端使用代理服务器
1.YUM添加代理服务器: [root@localhost /]# vim /etc/yum.conf 添加如下项目: proxy=http://172.16.1.188:8888/2.WGET添加代 ...
- AJAX学习笔记
AJAX不是一种编程语言,AJAX是一种实现网页异步加载的技术,即不刷新网页也能部分的更新网页的内容.如:提交表单信息,通过ajax可以不刷新页面来使得人们明白如何正确的填写信息,判断填写信息的错误或 ...
- springboot + mysql 编写
1.springboot+mysql连接因为用的是hibernate框架,所以首先修改model,增加如下内容:
- mysql 基础操作一
1.登录数据库 mysql -u root -p 2.查看数据库 show databases; 3.进入数据库 use 数据库名 4.查看该数据库中的表 show tables; 5.查看某一表中 ...