hdu1045 Fire Net(dfs)
2017-10-29 11:08
375 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045
题目大意:
* //这题意思是给出一张图,图中'X'表示wall,'.'表示空地,可以放置blockhouse
//同一条直线上只能有一个blockhouse,除非有wall隔开,问在给出的图中
//最多能放置多少个blockhouse
思路:搜索每一个点 然后去判读当前行和列 是否符合条件
第二种方法 可以用二分匹配来做这里就不介绍了
java代码
package bfs;
import java.util.Scanner;
public class hdu1045 {
/**
* @param args
*/
static int n;
static char map[][]=new char[5][5];
static int dx[] = {1,-1,0,0};
static int dy[] = {0,0,1,-1};
static int max;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
while((n=scan.nextInt())>0){
for(int i=0;i<n;i++){
String str=scan.next();
char a[]=str.toCharArray();
for(int j=0;j<a.length;j++){
map[i][j]=a[j];
}
}
max=0;
dfs(0);
System.out.println(max);
}
}
private static void dfs(int ans) {
// TODO Auto-generated method stub
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(ok(i,j)){
map[i][j]='1';
dfs(ans+1);
map[i][j]='.';
}
}
if(max<ans){
max=ans;
}
}
}
private static boolean ok(int x, int y) {
// TODO Auto-generated method stub
int x1,y1;
if(map[x][y]!='.')
return false;
for(int i=0;i<4;i++){
x1=x+dx[i];
y1=y+dy[i];
while(true){
if(x1<0||y1<0||x1>=n||y1>=n||map[x1][y1]=='X')
break;
else if(map[x1][y1]=='1'){
return false;
}
x1+=dx[i];
y1+=dy[i];
}
}
return true;
}
}
题目大意:
* //这题意思是给出一张图,图中'X'表示wall,'.'表示空地,可以放置blockhouse
//同一条直线上只能有一个blockhouse,除非有wall隔开,问在给出的图中
//最多能放置多少个blockhouse
思路:搜索每一个点 然后去判读当前行和列 是否符合条件
第二种方法 可以用二分匹配来做这里就不介绍了
java代码
package bfs;
import java.util.Scanner;
public class hdu1045 {
/**
* @param args
*/
static int n;
static char map[][]=new char[5][5];
static int dx[] = {1,-1,0,0};
static int dy[] = {0,0,1,-1};
static int max;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
while((n=scan.nextInt())>0){
for(int i=0;i<n;i++){
String str=scan.next();
char a[]=str.toCharArray();
for(int j=0;j<a.length;j++){
map[i][j]=a[j];
}
}
max=0;
dfs(0);
System.out.println(max);
}
}
private static void dfs(int ans) {
// TODO Auto-generated method stub
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(ok(i,j)){
map[i][j]='1';
dfs(ans+1);
map[i][j]='.';
}
}
if(max<ans){
max=ans;
}
}
}
private static boolean ok(int x, int y) {
// TODO Auto-generated method stub
int x1,y1;
if(map[x][y]!='.')
return false;
for(int i=0;i<4;i++){
x1=x+dx[i];
y1=y+dy[i];
while(true){
if(x1<0||y1<0||x1>=n||y1>=n||map[x1][y1]=='X')
break;
else if(map[x1][y1]=='1'){
return false;
}
x1+=dx[i];
y1+=dy[i];
}
}
return true;
}
}
相关文章推荐
- hdu 1045 Fire Net (最爱 DFS)
- hdu 1045 || zoj 1002 Fire Net(搜索:DFS+水题)
- 【HDU 1045】Fire Net(DFS,check函数)
- HDU 1045 Fire Net(DFS)
- hdu 1045 Fire Net (DFS java)
- HDU 1045 Fire Net(DFS)
- hdu 1045 Fire Net (dfs)
- HDU - 1045 - Fire Net (DFS)
- HDU 1045 Fire Net(DFS)
- hdu 1045 Fire Net(dfs)
- hdu1045 Fire Net (dfs)
- HDU 1045 Fire Net(DFS)
- HDU 1045 Fire Net(DFS回溯)
- hdu 1045 Fire Net (dfs || 二分图)
- hdu 1045 Fire Net(dfs)
- HDU 1045 Fire Net (DFS)
- HDU 1045-Fire Net(DFS)
- HDU1045 Fire Net(深搜DFS)
- hdu 1045 Fire Net(dfs)
- HDU1045 Fire Net 暴力搜索DFS