Java入門・初心者質問スレ Part.6

■ このスレッドは過去ログ倉庫に格納されています
2017/12/21(木) 00:24:33.33ID:E/ADCCn6
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.5
http://mevius.2ch.net/test/read.cgi/tech/1506675205/
413デフォルトの名無しさん
垢版 |
2018/01/13(土) 20:23:18.22ID:wiN0PDfT
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class AllTopologies {
■■private final List<Set<Integer>> topologies;
■■private Set<Integer> setOfSubsets;
■■private int setOfSubsetsID;
■■private final int n;
■■private final int m;
■■private final int maxSetOfSubsetsID;
■■public AllTopologies(int n) {
■■■■topologies = new ArrayList<Set<Integer>>();
■■■■setOfSubsets = new HashSet<Integer>();
■■■■setOfSubsetsID = 0;
■■■■this.n = n;
■■■■m = (int) Math.pow(2.0, (double) n) - 1;
■■■■maxSetOfSubsetsID = (int) Math.pow(2.0, (double) m - 1) - 1;
■■■■computeAllTopologies();
■■}
■■
414デフォルトの名無しさん
垢版 |
2018/01/13(土) 20:23:36.74ID:wiN0PDfT
■■public void printAllTopologies() {
■■■■System.out.print("The number of topologies on the set {");
■■■■int i;
■■■■for (i = 1; i < n; i++) {
■■■■■■System.out.print(i + ", ");
■■■■}
■■■■System.out.print(i);
■■■■System.out.println("} is " + topologies.size() + ".");
■■■■System.out.println();
■■■■
■■■■System.out.print("The all topologies on the set {");
■■■■for (i = 1; i < n; i++) {
■■■■■■System.out.print(i + ", ");
■■■■}
■■■■System.out.print(i);
■■■■System.out.println("} are:");
■■■■
■■■■for (Set<Integer> s : topologies) {
■■■■■■System.out.print("[");
■■■■■■System.out.print(convertIntToSet(0));
■■■■■■System.out.print(", ");
■■■■■■for (int e : s) {
■■■■■■■■
■■■■■■■■System.out.print(convertIntToSet(e));
■■■■■■■■System.out.print(", ");
■■■■■■}
■■■■■■System.out.print(convertIntToSet(m));
■■■■■■System.out.println("]");
■■■■}
■■}
415デフォルトの名無しさん
垢版 |
2018/01/13(土) 20:23:58.33ID:wiN0PDfT
■■private Set<Integer> convertIntToSet(int s) {
■■■■Set<Integer> set = new HashSet<Integer>();
■■■■for (int i = 1; i <= n; i++) {
■■■■■■if ((s & 0x00000001) == 1) {
■■■■■■■■set.add(i);
■■■■■■}
■■■■■■s >>= 1;
■■■■}
■■■■return set;
■■}
■■
■■private boolean nextSetOfSubsets() {
■■■■if (setOfSubsetsID == maxSetOfSubsetsID) {
■■■■■■return false;
■■■■}
■■■■setOfSubsetsID++;
■■■■setOfSubsets = new HashSet<Integer>();
■■■■int t = setOfSubsetsID;
■■■■for (int i = 1; i < m; i++) {
■■■■■■if ((t & 0x00000001) == 1) {
■■■■■■■■setOfSubsets.add(i);
■■■■■■}
■■■■■■t >>= 1;
■■■■}
■■■■return true;
■■}
416デフォルトの名無しさん
垢版 |
2018/01/13(土) 20:24:16.43ID:wiN0PDfT
■■private boolean isSetOfSubsetsTopology() {
■■■■List<Integer> list = new ArrayList<Integer>(setOfSubsets);
■■■■loop:
■■■■for (int i = 0; i < list .size(); i++) {
■■■■ for (int j = i + 1; j < list .size(); j++) {
■■■■ ■■int intersection = intersection(list.get(i), list.get(j));
■■■■ ■■if (intersection != 0 && intersection != m && !setOfSubsets.contains(intersection)) {
■■■■ ■■■■return false;
■■■■ ■■}
■■■■ ■■int union = union(list.get(i), list.get(j));
■■■■ ■■if (union != 0 && union != m && !setOfSubsets.contains(union)) {
■■ ■■■■■■return false;
■■■■ ■■}
■■■■ }
■■■■}
■■■■return true;
■■}
■■
■■private void computeAllTopologies() {
■■■■do {
■■■■■■if (isSetOfSubsetsTopology()) {
■■■■■■■■topologies.add(setOfSubsets);
■■■■■■}
■■■■} while(nextSetOfSubsets());
■■}
417デフォルトの名無しさん
垢版 |
2018/01/13(土) 20:24:41.80ID:wiN0PDfT
■■private static int intersection(int subset1, int subset2) {
■■■■return subset1 & subset2;
■■}

■■private static int union(int subset1, int subset2) {
■■■■return subset1 | subset2;
■■}

■■public static void main(String[] args) {
■■■■// TODO Auto-generated method stub
■■■■AllTopologies allTopologies = new AllTopologies(4);
■■■■allTopologies.printAllTopologies();
■■}
■■

}
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況