gpt4 book ai didi

java - java数据结构从变为

转载 作者:行者123 更新时间:2023-12-01 19:54:06 30 4
gpt4 key购买 nike

这可以完美地使用整数进行拓扑排序,但是我想让它与作为参数的字符串类型兼容。有人对如何从这里更改数据结构有任何指导吗?或者我是否必须重写整个内容才能使 [add.edge("a","b");] 工作?我尝试简单地更改类型,但随后我感到困惑,一旦我尝试更改导致错误的内容,情况就会变得很糟糕。我尝试将所有更改为这合适吗?当我改变越来越多时,我仍然收到错误

 // A Java program to print topological sorting of a graph
// using indegrees
import java.util.*;

//Class to represent a graph
class Graph
{
int V;// No. of vertices

//An Array of List which contains
//references to the Adjacency List of
//each vertex
List <Integer> adj[];
public Graph(int V){//constructor
this.V = V;
adj = new ArrayList[V];
for(int i = 0; i < V; i++)
adj[i]=new ArrayList<Integer>();
}
// function to add an tasks to tree
public void addEdge(int u,int v){
adj[u].add(v);
}
// prints a Topological Sort of the complete graph
public void topologicalSort(){
// Create a array to store indegrees of all
// vertices. Initialize all indegrees as 0.
int indegree[] = new int[V];

// Traverse adjacency lists to fill indegrees of
// vertices. This step takes O(V+E) time
for(int i = 0; i < V; i++){
ArrayList<Integer> temp = (ArrayList<Integer>) adj[i];
for(int node : temp){
indegree[node]++;
}
}

// Create a queue and enqueue all vertices with
// indegree 0
Queue<Integer> q = new LinkedList<Integer>();
for(int i = 0;i < V; i++){
if(indegree[i]==0)
q.add(i);
}
// Initialize count of visited vertices
int cnt = 0;
// Create a vector to store result (A topological
// ordering of the vertices)
Vector <Integer> topOrder=new Vector<Integer>();
while(!q.isEmpty()){
// Extract front of queue (or perform dequeue)
// and add it to topological order
int u=q.poll();
topOrder.add(u);
// Iterate through all its neighbouring nodes
// of dequeued node u and decrease their in-degree
// by 1
for(int node : adj[u]){
// If in-degree becomes zero, add it to queue
if(--indegree[node] == 0)
q.add(node);
}
cnt++;
}
// Check if there was a cycle
if(cnt != V){
System.out.println("There exists a cycle in the graph");
return ;
}//else{System.out.println("no cycle in the graph");}
// Print topological order
for(int i : topOrder){
System.out.print(i+" ");
}
}
}
// Driver program to test above functions
class Main
{
public static void main(String args[])
{
Graph g=new Graph(8);//must be max number of letters+1
g.addEdge(1, 4);
g.addEdge(2, 5);
g.addEdge(7, 5);
g.addEdge(5, 4);
g.addEdge(3, 4);
g.addEdge(4, 6);
g.addEdge(2, 4);
System.out.println("Following is a Topological Sort");
g.topologicalSort();
}
}

最佳答案

最简单的解决方案是在类的定义中使用泛型。然后用户可以定义是否需要字符串或整数(或其他任何内容):

Graph<String> stringGraph = new Graph<>();
stringGraph.addEdge("foo", "bar");

Graph<Integer> intGraph = new Graph<>();
intGraph.addEdge(5, 7);

Graph<Vertex> vertexGraph = new Graph<>();
Vertex v1 = new Vertex(...);
Vertex v2 = new Vertex(...);
vertexGraph.addEdge(v1, v2);

关于java - java数据结构从<Int>变为<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194814/

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