所以我需要使用Java Dijkstra算法。我在这里找到了Dijkstra的一个有效例子。但在我的例子中,我有大约5000个顶点。我得到了一个错误:main方法(String[])的代码超过了65535字节的限制。在stackoverflow上有一些类似的主题,但我找不到如何解决这个问题的实现。有人能给我一些代码来解决这个问题吗。。
import java.util.PriorityQueue;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class Vertex implements Comparable<Vertex>
{
public final String name;
public Edge[] adjacencies;
public double minDistance = Double.POSITIVE_INFINITY;
public Vertex previous;
public Vertex(String argName) { name = argName; }
public String toString() { return name; }
public int compareTo(Vertex other)
{
return Double.compare(minDistance, other.minDistance);
}
}
class Edge
{
public final Vertex target;
public final double weight;
public Edge(Vertex argTarget, double argWeight)
{ target = argTarget; weight = argWeight; }
}
public class Dijkstra
{
public static void computePaths(Vertex source)
{
source.minDistance = 0.;
PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
vertexQueue.add(source);
while (!vertexQueue.isEmpty()) {
Vertex u = vertexQueue.poll();
// Visit each edge exiting u
for (Edge e : u.adjacencies)
{
Vertex v = e.target;
double weight = e.weight;
double distanceThroughU = u.minDistance + weight;
if (distanceThroughU < v.minDistance) {
vertexQueue.remove(v);
v.minDistance = distanceThroughU ;
v.previous = u;
vertexQueue.add(v);
}
}
}
}
public static List<Vertex> getShortestPathTo(Vertex target)
{
List<Vertex> path = new ArrayList<Vertex>();
for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
path.add(vertex);
Collections.reverse(path);
return path;
}
public static void main(String[] args)
{
// mark all the vertices
Vertex X1 = new Vertex("A");
//...till Vertex X5000..
// set the edges and weight
X1.adjacencies = new Edge[]{ new Edge(X2, 8) };
//...till X5000.adjacencies...
computePaths(X1); // run Dijkstra
System.out.println("Distance to " + X5 + ": " + X5.minDistance);
List<Vertex> path = getShortestPathTo(X5);
System.out.println("Path: " + path);
}
}
编辑
我试图从MySQL表中获取数据,但在声明vertex时遇到了问题。
String query = "SELECT * FROM coordinates";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next())
{
int id = rs.getInt("id");
String vert = Integer.toString(id);
//Which approach will work?
Vertex vert = new Vertex(vert);
}
st.close();
您是否在代码中硬编码图的定义?不要这样做。改为从数据文件中读取顶点和边。
我正在运行一个使用Apache Tomcat8.5和Java1.8的Struts2项目。 我被以下错误所困扰;我试过所有可能的解决办法,但找不到任何答案。 JasperException:无法为JSP编译类: 在生成的java文件[d:\newworkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\catalina\loca
问题内容: 我有以下代码: 尝试编译此错误消息: 问题答案: 在Java中,方法不能超过65535个字节。 因此,要解决此问题,请将您的方法分解为多个子方法。
问题内容: 因此,我正在处理在Websphere 7(JDK 6)上运行的旧servlet代码。开发环境设置使用Tomcat 6(JDK 6)。 为什么它在Websphere 7上而不在Tomcat 6上可以工作? 这与应用程序服务器有关吗? 如果您的回答为“是”,则为“否”。2,除了分解代码或使用动态包含之外,您在Tomcat 6(JDK 6)上是否有解决方法? 该计划与将静态包含更改为动态包含
与HTTP不同,websocket在从HTTP升级后保持长时间连接。 即使操作系统被调优为使用所有端口,总共仍然只有65536个端口。NGINX有可能超过这个限制吗? 一个潜在的解决方案是,但是它缺少文档--至少我没有找到除了下面这段
我的问题是,当我上传一个文件超过我在脚本中设置的限制(5 MB)时,它会在网站顶部显示此警告: 警告:第0行未知中32485176字节的POST内容长度超过了20971520字节的限制 例如,在这里,我上传了一个文件超过(30 MB),但当我上传一个文件超过(5 MB),小于30(或没有那么大)它不显示警告,只显示我想要的代码错误: 我正在localhost,这个错误每次都出现,我知道如何通过修改
问题内容: 用户在我的网站上上传图片时遇到了很多问题。 他们最多可以上传6张图片 最初,我不得不将php.ini中的值更改为: 我不得不更改为这个,因为出现了各种错误,例如内存不足,超出最大发布数等。 一切正常,直到我检查了包含以下内容的错误日志: 如果我将帖子的最大值改回前8M,则会收到如下消息: 有什么想法我要去哪里吗? 问题答案: 在某些32位系统上,PHP将采用类似或的内存设置,并且通过不