ZOJ--1002:Fire_Net
来源:互联网 发布:淘宝的宝贝网址怎么看 编辑:程序博客网 时间:2024/05/27 01:24
题目链接:点击打开链接
题目大意:在一个n*n的城市里 有墙 在没有墙的地方可以放堡垒,堡垒可以打到东南西北四个方向的任何东西(包括堡垒)但不可以打穿墙,现在在城市里放堡垒 可以使其打到 任何一条街道的任何地方。 求可以放置堡垒的最大数。
输入:先输入n表示城市的边长(最长为4),若n为0结束。
输出:输出每一个城市样例的最大堡垒数
例:
Sample input:(X表示墙,.表示街道,无空格输入)
4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0
Sample output:
5
1
5
2
4
思路:
用一个数组存放城市的地图,直接一行一行递归,每次都是列数(c)加一,若c等于n+1,则行数(r)加一 、c此刻为0
下面上代码:
import java.util.Scanner;public class Main{static int n,max=0,count=0;static char arr[][];static boolean row[],column[];public static void main(String[]args){Scanner s=new Scanner(System.in);while((n=s.nextInt())!=0){arr=new char[n][n];row=new boolean[n];column=new boolean[n];for(int i=0;i<n;i++){String str=s.next();for(int j=0;j<n;j++){arr[i][j]=str.charAt(j);}}dfs(0,0);System.out.println(max);max=0;}}public static void dfs(int r,int c){if(r==n-1&&c==n-1){if(judge(arr[r][c],r,c)){count++;if(max<count)max=count;count--;}else if(max<count)max=count;return;}if(judge(arr[r][c],r,c)){count++;row[r]=true;column[c]=true;if(c==n-1)dfs(r+1,0);else dfs(r,c+1);count--;row[r]=false;column[c]=false;}if(c==n-1)dfs(r+1,0);else dfs(r,c+1);;}public static boolean judge(char k,int i,int j){if(k=='X'){if(i<n-1)column[j]=false;if(j<n-1)row[i]=false;return false;}if(row[i]||column[j])return false;return true;}}
阅读全文
0 0
- ZOJ--1002:Fire_Net
- ZOJ 1002
- ZOJ 1002
- zoj 1002
- ZOJ 1002
- ZOJ 1002
- zoj 1002
- zoj-1002
- zoj 1002
- ZOJ 1002
- ZOJ-1002
- ZOJ 1002
- ZOJ-1002
- ZOJ 1002
- ZOJ 1002
- zoj-1002
- ZOJ 1002
- ZOJ 1002
- Because we are Oier
- 利用Metaweblog技术的API接口同步到多个博客网站(详细)
- BeanUtils 工具类
- Ext JS 6学习文档–第2章–核心概念
- javascript作用域与闭包
- ZOJ--1002:Fire_Net
- 关于博客背景
- AndroidSDK 环境搭建
- 自定义View练习
- 域名解析到部署出现的问题总结
- UVA-796(无向图割桥模板题)
- Android控件
- Python-First day
- jumpserver 简单使用