OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / osb / src / main / java / jp / sourceforge / stigmata / birthmarks / osb / hungarian / Line.java
1 package jp.sourceforge.stigmata.birthmarks.osb.hungarian;\r
2 \r
3 /**\r
4  * ハンガリアン法で,2次元配列の特定個所に引く線を表すクラス.\r
5  * \r
6  * @author Haruaki Tamada\r
7  */\r
8 public class Line implements Comparable<Line>{\r
9     public static enum Direction{\r
10         ROW, COLUMN;\r
11     };\r
12 \r
13     private int index;\r
14     private int count;\r
15     private int crossCount;\r
16     private Direction direction = Direction.ROW;\r
17 \r
18     /**\r
19      * オブジェクトを作成する.\r
20      * @param index 行もしくは列の番号を表す..\r
21      * @param count その行もしくは列に含まれる0の数.\r
22      * @param crossCount その行,もしくは列に既に引かれている線の数.\r
23      * @param direction 方向.\r
24      */\r
25     public Line(int index, int count, int crossCount, Direction direction){\r
26         this.index = index;\r
27         this.count = count;\r
28         this.crossCount = crossCount;\r
29         this.direction = direction;\r
30     }\r
31 \r
32     /**\r
33      * 位置を返す.行か,列かは,{@link #getDirection() <code>getDirection()</code>}メソッドで決定される.\r
34      */\r
35     public int getIndex(){\r
36         return index;\r
37     }\r
38 \r
39     /**\r
40      * 0の数を返す.\r
41      */\r
42     public int getCount(){\r
43         return count;\r
44     }\r
45 \r
46     /**\r
47      * 方向を返す.\r
48      */\r
49     public Direction getDirection(){\r
50         return direction;\r
51     }\r
52 \r
53     /**\r
54      * このオブジェクトを比較する.\r
55      * 0の数で比較する.ただし,0の数が同数であれば,交わっている線の数でも比較する.\r
56      * 0が多いほど,また,交わっている線が多いほど大きいとする.\r
57      */\r
58     @Override\r
59     public int compareTo(Line line){\r
60         if(getCount() < line.getCount()){\r
61             return -1;\r
62         }\r
63         else if(getCount() > line.getCount()){\r
64             return 1;\r
65         }\r
66         else{\r
67             if(crossCount < line.crossCount){\r
68                 return -1;\r
69             }\r
70             if(crossCount > line.crossCount){\r
71                 return 1;\r
72             }\r
73             return 0;\r
74         }\r
75     }\r
76 \r
77     /**\r
78      * このオブジェクトの文字列表現を返す.\r
79      */\r
80     public String toString(){\r
81         return String.format("[index: %d, count: %d(%d) (%s)]", getIndex(), getCount(), crossCount, getDirection());\r
82     }\r
83 }\r