【プログラムF:\ホームページ\8q\PlayApplet.java】**************************
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.*;
public class PlayApplet extends JApplet
{
Queens qu;
//Boad bo;
Boad2 bo;
public void init()
{
qu=new Queens();
//bo=new Boad();
bo=new Boad2(this);
System.out.println("開始");
qu.setQueen();
bo.Display2(qu.plans);
bo.Display(qu.plans);
}
}
public class PlayApplication
{
public static void main(String[] args){
Queens qu=new Queens();
System.out.println("開始");
qu.setQueen();
Boad bo=new Boad();
bo.Display2(qu.plans);
bo.Display(qu.plans);
}
}
class Boad{
JFrame jf;
JScrollPane js;
JTextArea jt;
Pattern pattern;
Matcher matcher;
Boad(){
JFrame jf=new JFrame("Boad");
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});
jf.setBounds(0,0,200,800);
jf.setVisible(true);
Container co=jf.getContentPane();
jt=new JTextArea();
js=new JScrollPane(jt);
co.add(js);
jf.setPreferredSize(new Dimension(200,500));
jf.pack();
}
void Display2(ArrayList plans){
String raw="00000000";
String cell="□";
String queen="●";
String column="";
int count=1;
int position=0;
for(int i=0;i<plans.size();i++){
if(i%8==0){
jt.append("\n結果その"+count+"\n");
count++;
}
raw="00000000";
raw=raw+Integer.toBinaryString((Integer)plans.get(i));
raw=raw.substring(raw.length()-8)+"\n";
pattern = Pattern.compile("0");
matcher = pattern.matcher(raw);
raw=matcher.replaceAll(cell);
pattern = Pattern.compile("1");
matcher = pattern.matcher(raw);
raw=matcher.replaceAll(queen);
jt.append(raw);
}
js.setPreferredSize(js.getPreferredSize());
}
void Display(ArrayList plans){
int count=1;
for(int i=0;i<plans.size();i++){
if(i%8==0){
jt.append("\n結果その"+count+"\n");
count++;
}
jt.append(plans.get(i)+",");
}
}
}
class Boad2{
JScrollPane js;
JTextArea jt;
Pattern pattern;
Matcher matcher;
Boad2(JApplet c1){
Container co=c1.getContentPane();
co.setBounds(0,0,200,800);
jt=new JTextArea();
js=new JScrollPane(jt);
co.add(js);
}
void Display2(ArrayList plans){
String raw="00000000";
String cell="□";
String queen="●";
String column="";
int count=1;
int position=0;
for(int i=0;i<plans.size();i++){
if(i%8==0){
jt.append("\n結果その"+count+"\n");
count++;
}
raw="00000000";
raw=raw+Integer.toBinaryString((Integer)plans.get(i));
raw=raw.substring(raw.length()-8)+"\n";
pattern = Pattern.compile("0");
matcher = pattern.matcher(raw);
raw=matcher.replaceAll(cell);
pattern = Pattern.compile("1");
matcher = pattern.matcher(raw);
raw=matcher.replaceAll(queen);
jt.append(raw);
}
js.setPreferredSize(js.getPreferredSize());
}
void Display(ArrayList plans){
int count=1;
for(int i=0;i<plans.size();i++){
if(i%8==0){
jt.append("\n結果その"+count+"\n");
count++;
}
jt.append(plans.get(i)+",");
}
}
}
public class Queens{
int[] area={0,0,0,0,0,0,0,0};
int masque=0;
int i;
int count=1;
Rule rl=new Rule();
ArrayList<Integer> plans=new ArrayList<Integer>();
void setQueen(){
for(i=0;i<area.length;i++){
masque=255-rl.setMasque(i,area);
if(area[i]!=0){
area[i]=area[i]>>1;
}
else if(area[i]==0)area[i]=128;
while((masque & area[i])==0){
area[i]=area[i]>>1;
if(area[i]==0){
break;
}
}
if(i==7 && area[i]!=0){
for(int j=0;j<area.length;j++){
plans.add(area[j]);
}
count++;
i--;
}
if(area[0]==0)break;
if(area[i]==0)i-=2;
}
System.out.println("完了");
}
}
public class Rule{
int masque;
int setMasque(int index,int[] boad){
masque=0;
if(index==0)return masque;
for(int i=0;i<index;i++){
masque=masque|boad[i]|boad[i]<<index-i|boad[i]>>index-i;
}
return masque;
}
}