package com.gmail.bleed1979.ptt;
import java.util.ArrayList;
import java.util.List;
public class Battle {
private static boolean isLegal
(StringBuffer[][] table,
int people,
int sleep
) { // check bigger than sleep
for(int j = 0; j < table[0].length; ++j) {
int counter = 0;
for(int i = 0; i < table.length; ++i) {
if(table[i][j].length() > 0 && table[i][j].toString().equals("sleep")) {
++counter;
}
}
if(counter > sleep) {
return false;
}
}
// check different round
for(int j = 0; j < table[0].length; ++j) {
int[] fight = new int[people + 1];
for(int i = 0; i <= people; ++i) {
fight[i] = 0;
}
for(int i = 0; i < table.length; ++i) {
if(table[i][j].length() > 0 && !table[i][j].toString().equals("sleep")) {
String[] array
= table
[i
][j
].
toString().
split("_"); int i1
= Integer.
parseInt(array
[0]); int i2
= Integer.
parseInt(array
[1]); fight[i1] += 1;
fight[i2] += 1;
for(int k = 0; k <= people; ++k) {
if(fight[k] > 1) {
return false;
}
}
}
}
}
return true;
}
if("false".equals(flag.toString())) {
if(index == list.size()) {
} else {
for(int i = 0; i < table.length; ++i) {
for(int j = 0; j < table[i].length; ++j) {
if(table[i][j].length() == 0) {
table[i][j].append(list.get(index));
if(isLegal(table, list.size(), sleep)) {
dfs(table, list, index + 1, sleep, flag);
if("true".equals(flag.toString())) {
break;
}
}
}
}
if("true".equals(flag.toString())) {
break;
}
}
}
}
}
public static void main
(String[] args
) { final int round = 6, people = 8;
int sleep = 6 - (8 / 2);
// generate string
List<String> list = new ArrayList<String>();
int[] fight = new int[people + 1];
for(int i = 0; i <= people; ++i) {
fight[i] = 0;
}
for(int i = 1; i <= people; ++i) {
for(int k = 0; k < list.size(); ++k) {
String[] array
= list.
get(k
).
split("_"); if(array[1].equals("" + i)) {
++fight[i];
}
}
for(int j = people; j >= 1; --j) {
if(i != j && fight[i] < round) {
boolean flag = false;
for(int k = 0; k < list.size(); ++k) {
String[] array
= list.
get(k
).
split("_"); if((str1.equals(array[0]) && str2.equals(array[1])) ||
(str1.equals(array[1]) && str2.equals(array[0])) ||
fight[j] >= round) {
flag = true;
break;
}
}
if(flag) {
continue;
} else {
list.add(str);
++fight[i];
}
}
}
}
System.
out.
println("list size is " + list.
size()); for(int i = 0; i < round * sleep; ++i) {
list.add("sleep");
}
for(int i = 0; i < list.size(); ++i) {
System.
out.
println(list.
get(i
)); }
System.
out.
println("total need " + list.
size());
for(int i = 6; i <= 100; ++i) { // i is time section
for(int j = 0; j < round; ++j) {
for(int k = 0; k < i; ++k) {
}
}
dfs(table, list, 0, sleep, sbGameOver);
if("true".equals(sbGameOver.toString())) {
break;
}
}
if(table != null) {
System.
out.
println("answer is"); for(int i = 0; i < table.length; ++i) {
for(int j = 0; j < table[i].length; ++j) {
System.
out.
print(table
[i
][j
] + " "); }
}
} else {
System.
out.
println("no answer"); }
}
}