package com.tulun.suanfa;
import java.util.LinkedList;
import java.util.Scanner;
/**
* '◎' 没有被监视
* '*' 被监视
* '※' 机器人放置位置
* '—''|' 围墙
*
* @author lzq
*
*/
public class ShiJieMingHua {
/**
* 声明一个char类型的二维数组
*/
static char[][] array;
/**
* 建立有边界的二维数组
* @param length
* @param width
*/
public static char[][] new_2Array(int length,int width){
array = new char[length+2][width+2];
for (int i = 0; i < length+2; i++) {
for (int j = 0; j < width+2; j++) {
array[i][j] = '◎';
}
}
for (int i = 0; i < length + 2; ++i){
if (i == 0 || i == length + 1){
for (int j = 0; j < width + 2; ++j){
array[i][j] = '—';
}
}else{
if(i != 0 || i != length + 1) {
array[i][0] = '|';
array[i][width + 1] = '|';
}
}
}
return array;
}
/**
* 判断此位置是否可以放置警卫
* @param array
* @param i
* @param j
* @return
*/
public static boolean isPut(int i,int j){
if (array[i][j] == '◎' && array[i - 1][j] != '*' && array[i][j - 1] != '*'
&& array[i + 1][j] !='*' && array[i][j + 1] != '*'){
return true;
}
return false;
}
/**
* 设置警卫并且改变相应的值
* @param array
* @param i
* @param j
*/
public static void set(int i,int j){
/**
* 此位置放置警卫
*/
array[i][j] = '※';
/**
* 改变放置警卫能侦测到位置的值
*/
if (array[i - 1][j] == '◎') array[i - 1][j] = '*';
if (array[i][j - 1] == '◎') array[i][j - 1] = '*';
if (array[i][j + 1] == '◎') array[i][j + 1] = '*';
if (array[i + 1][j] == '◎') array[i + 1][j] = '*';
}
/**
* 检查是否全部填满
* @param array
* @param length
* @param width
* @return
*/
public static boolean check(int length,int width){
for (int i = 1; i <= length;++i)
{
for (int k = 1; k <= width; ++k)
{
if (array[i][k] == '◎')
{
return false;
}
}
}
return true;
}
/**
* 全部回退
* @param array
* @param length
* @param width
*/
public static void goBack(int length,int width){
for (int i = 1; i <= length; ++i)
{
for (int k = 1; k <= width; ++k)
{
array[i][k] = '◎';
}
}
}
/**
* 警卫位置的填入
* @param array
* @param x
* @param y
* @param length
* @param width
*/
public static void insert(int x,int y,int length,int width){
/**
* 判断此位置是否越界
*/
if (x > length || y > width){
return;
}
/**
* 判断此位置是否合适放置
* 如果合适,设置警卫并且改变相应的值
*/
if (isPut(x, y)){
set(x, y);
}
/**
* 到下一行接着放置
*/
if (y == width){
insert(x+1,1,length,width);
}else{
insert(x,y+1,length,width);
}
}
/**
* 逐一添置警卫
* @param array
* @param length
* @param width
*/
public static void insert1(int length,int width){
for (int i = 1; i <= length;++i)
{
for (int j = 1; j <= width;++j)
{
/**
* 往i,j位置添加
*/
insert(i,j,length,width);
/**
* 判断是否填满
*/
if (check(length,width)){
break;
}
/**
* 回退
*/
goBack(length,width);
}
}
}
/**
* 打印二维数组元素
* @param array
*/
public static void show2(){
for(char[] brr: array){
for(char i:brr){
System.out.print(i+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
for(;;) {
System.out.println("设置陈列馆:");
System.out.print("行数m: ");
Scanner sc1=new Scanner(System.in);
int m = Integer.parseInt(sc1.next());
System.out.print("列数n: ");
sc1=new Scanner(System.in);
int n=Integer.parseInt(sc1.next());
new_2Array(m,n);
insert1(m,n);
show2();
}
}
}
运行结果: