gpt4 book ai didi

java - 查找流程图中的所有方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:40 25 4
gpt4 key购买 nike

我用 Java 做了一个 FlowChart 图表编辑器。它绘制流程图并将它们相互连接并创建两个数组。其中一个显示连接节点和线,另一个显示相互连接的元素。我必须找到从 Begin Two And 开始的所有方法。例如,如果我有一些钻石供决策,我有两种不同的方法..我想获得所有这些方法..我必须使用哪种算法?

编辑 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 的所有方法

有两种方式

A->B->C->E

A->B->D->E

我可以找到从左到右搜索数组的第一种方法。如果我看到 1,我会取 J 的 walu e 并转到 i 中的第 J 个元素行,将该元素设为 2 并从 [i,j+1] 开始搜索,如果到达 E,则发送结果。

但是我的问题是在第一行的第二次搜索中它不会看到 1 并且会转到第二行并且有第一个元素 1 但它指的是第一行并且它将是循环。

我也尝试使用 DFS 和回溯,但它并没有指显示所有路径,只有一条路径。

如果我找到 1 并开始搜索 [i,j],我会尝试将所有下面的列设为 0,但在第二次搜索时它不会看到任何东西,我的 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?还是别的东西??

最佳答案

Floyd-Warshall算法将计算所有顶点之间的最短路径。如果您不是寻找最短路径,只是所有路径,您可以通过在两个节点之间进行详尽的深度优先搜索来实现。

我强烈建议您查看 Wikipedia's page图算法。

关于java - 查找流程图中的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com