Java で FlowChart ダイアグラム エディタを作成しました。それは、フローチャートを描画し、それらを相互に接続して、2 つの配列を作成します。1 つはノードとラインの接続を示し、もう 1 つは要素同士の接続を示します。Begin Two And の開始からすべての方法を見つけなければなりません。たとえば、決定のためのダイヤモンドがある場合、2 つの別々の方法があります..このすべての方法を取得したい..どのアルゴリズムを使用する必要がありますか?
編集3: 解決済みこんにちは、私は自分の問題を自分で解決しました..ここに私のコード..))
public void search(){
// System.out.print(map.length);
for(i=0;i<map.length;i++)
visit[i]=0;
visit[0]=1;
find(0,map.length-1,1);
}
public void find(int i,int d,int step){
for(int j=0;j<map.length;j++){
System.out.println(">>"+i+"->"+j);
if(visit[j]!=0 || map[i][j]==0)
continue;
if(j==d){
visit[j]=step;
OutputCycle();
visit[j]=0;
return;
}
System.out.println(""+i+" to "+j);
visit[j]=step;
find(j,d,step+1);
visit[j]=0;
}
}
public void OutputCycle(){
System.out.println("OUTPUT");
for(k=0;k<visit.length;k++){
for(int i=0;i<visit.length;i++){
if(visit[i]==k+1){
System.out.print(i);
}
}
}
System.out.println();
}
編集1:私が自分の問題に取り組んでいたので、一部を解決しましたが、間違いもありません...ここで私の問題の詳細な説明:要素間の接続を説明する配列があります
j
A B C D E
A 0 1 0 0 0
B 1 0 1 1 0
i C 0 1 0 0 1
D 0 1 0 0 1
E 0 0 1 1 0
これは私の接続配列です..AからEまでのすべての方法を見つけようとしています
2通りあります
A->B->C->E
A->B->D->E
左から右に配列を検索する最初の方法を見つけることができます。1 が表示されたら、J の walu e を取り、i の J 番目の要素行に移動し、その要素を 2 にして [i,j+1] から検索を開始し、E に到達した場合は結果を送信します。
しかし、ここで私の問題は、最初の行の ecnd 検索で 1 が表示されず、2 行目に移動し、最初の要素 1 がありますが、最初の行を参照し、ループになります。
また、バックトラックを使用して DFS を使用しようとしましたが、すべてのパスを表示するのではなく、1 つのパスのみを表示します。
そして、1を見つけて[i、j]の検索を開始すると、列の下のすべてを0にしようとしましたが、2回目の検索では何も表示されず、私のarryテーブルは空白のテーブルになります))。
私は何かが欠けていることを知っていますが、それを理解することはできません..
編集2:
今、私は解決策を閉じましたが、再び問題があります。このコードを使用して、マトリックスからパスを計算しました
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Meko
*/
public class Main {
List visited = new ArrayList();
List allObjects = new ArrayList();
int map[][] = {{3, 1, 0, 0, 0},
{1, 0, 1, 1, 0},
{0, 1, 0, 0, 3},
{0, 1, 0, 0, 3},
{0, 0, 1, 1, 0}};
int i, j, k;
public Main() {
ShowArray();
System.out.println();
find(0, 0);
System.out.println();
result();
System.out.println();
afterFind();
System.out.println();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
new Main();
}
public void ShowArray() {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map.length; j++) {
System.out.print(" " + map[i][j]);
}
System.out.println("");
}
}
public void find(int sRow, int sCol) {
for (i = sRow; i < map.length; i++) {
for (j = sCol; j < map.length; j++) {
if (map[i][j] == 1) {
map[i][j] = 2;
visited.add(" " + i + " " + j);
for (k = i; k < map.length; k++) {
map[k][i] = 0;
}
find(j, i);
} else if (map[i][j] == 3) {
visited.add(" " + i + " " + j);
for (k = i; k < map.length; k++) {
map[k][i] = 0;
}
System.out.println("Founded");
map[i][j] = 2;
find(0, 0);
}
}
}
}
public void result() {
System.out.println(visited);
}
public void afterFind() {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map.length; j++) {
System.out.print(" " + map[i][j]);
}
System.out.println("");
}
}
}
出力は終了です
3 1 0 0 0
1 0 1 1 0
0 1 0 0 3
0 1 0 0 3
0 0 1 1 0
創業 創業 創業
[ 0 0, 0 1, 1 2, 2 4, 1 3, 3 4]
0 2 0 0 0
0 0 2 2 0
0 0 0 0 2
0 0 0 0 2
0 0 0 0 0
2は、訪問して変更したことを意味します..問題は、訪問リストに追加することです
00 、 01 、 12 、 24 これは最初のパスですが、その後は 13,34 のみです。これは、配列の残りを 0 に変更して検索しないためです。どうすればこれを解決できますか? 00,01,12,24 および 00,01 または 10,13,34 でなければなりません。そして、これがDFSまたはBFSであるとは思いませんか?または、他の何か??