Problem1002 Fire Net
Problem: Fire Net
Java Solutions:算法思想来源于网上,这道题偶看了很久了一直不知道怎么开始动手做题,写了个Java版本的,可惜ZJU不能用Java提交,我会再深入看这道题,希望能撞出一些的想法。感谢Yimin的思想,我会深入钻研的:-),像xiaocui一样学习,像CSharp一样战斗~~
/*Solutions Version1.0*/
暂时没有空间提供文本下载:-(,后面会补上来
package core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class FireNet {
private int n;
private int max;
private char map[][];
public FireNet(int n){
this.n = n;
max = 0;
map = new char[4][4];
}
public static void inputWork(){
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int k;
String s;
try {
start:
while((s = in.readLine())!= null && s.length() != 0){
k = Integer.parseInt(s);
if(k>0&&k<=4){
FireNet fn = new FireNet(k);
int i=0;
retype:
while(i < fn.n ){
s = in.readLine();
for( int j=0;j < fn.n ; j++ ){
if(s.length() == fn.n){
fn.map[i][j]=s.charAt(j);
// System.out.print(fn.map[i][j]);
}
else{
System.err.print("输入长度不对");
continue retype;
// continue start;
}
}
i++;
// System.out.println();
}
System.out.println(fn.getMax(0,0));
}else if(k == 0){
continue start;
}
else{
System.out.println("输入大小有误,必须是介于0和4的数字(包括0和4)");
continue start;
}
}
} catch (NumberFormatException e1) {
System.err.println("输入字符非法,必须是介于0和4的数字(包括0和4)");
// e1.printStackTrace();
// break start;
} catch (IOException e1) {
e1.printStackTrace();
}
}
public boolean inputMap(int row,int col){
int i;
for(i = row -1;i >= 0;i--){
if(map[i][col] == '.')
return false;
if(map[i][col] == 'X')
break;
}
for(i = col -1;i >= 0;i--){
if(map[row][i] == '.')
return false;
if(map[row][i] == 'X')
break;
}
return true;
}
public int getMax(int pos,int cnt){
if(pos == (n*n)){
if(cnt > this.max)
this.max = cnt;
}
else{
int row = pos/n;
int col = pos%n;
if((map[row][col] == '.') && (inputMap(row,col))){
getMax(pos+1,cnt+1);
}
getMax(pos+1,cnt);
}
return this.max;
}
public static void main(String[] args){
inputWork();
}
}
暂时没有空间提供文本下载:-(,后面会补上来

package core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class FireNet {
private int n;
private int max;
private char map[][];
public FireNet(int n){
this.n = n;
max = 0;
map = new char[4][4];
}
public static void inputWork(){
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int k;
String s;
try {
start:
while((s = in.readLine())!= null && s.length() != 0){
k = Integer.parseInt(s);
if(k>0&&k<=4){
FireNet fn = new FireNet(k);
int i=0;
retype:
while(i < fn.n ){
s = in.readLine();
for( int j=0;j < fn.n ; j++ ){
if(s.length() == fn.n){
fn.map[i][j]=s.charAt(j);
// System.out.print(fn.map[i][j]);
}
else{
System.err.print("输入长度不对");
continue retype;
// continue start;
}
}
i++;
// System.out.println();
}
System.out.println(fn.getMax(0,0));
}else if(k == 0){
continue start;
}
else{
System.out.println("输入大小有误,必须是介于0和4的数字(包括0和4)");
continue start;
}
}
} catch (NumberFormatException e1) {
System.err.println("输入字符非法,必须是介于0和4的数字(包括0和4)");
// e1.printStackTrace();
// break start;
} catch (IOException e1) {
e1.printStackTrace();
}
}
public boolean inputMap(int row,int col){
int i;
for(i = row -1;i >= 0;i--){
if(map[i][col] == '.')
return false;
if(map[i][col] == 'X')
break;
}
for(i = col -1;i >= 0;i--){
if(map[row][i] == '.')
return false;
if(map[row][i] == 'X')
break;
}
return true;
}
public int getMax(int pos,int cnt){
if(pos == (n*n)){
if(cnt > this.max)
this.max = cnt;
}
else{
int row = pos/n;
int col = pos%n;
if((map[row][col] == '.') && (inputMap(row,col))){
getMax(pos+1,cnt+1);
}
getMax(pos+1,cnt);
}
return this.max;
}
public static void main(String[] args){
inputWork();
}
}
1 条评论:
加油!!:)
发表评论